如何从 git 中删除与过滤器匹配的远程引用?

问题描述 投票:0回答:1

从 GitLab 迁移到 GitHub 时,在执行

git push --mirror <URL>
后,我注意到
git ls-remote --refs
(在 GitHub 上的目标存储库中)显示了一些以
refs/merge-requests/
前缀开头的参考。

由于它们与 GitHub 无关(它们仅由 GitLab 使用),所以我想删除它们;我该怎么办?

换句话说,如何从远程删除符合搜索/过滤条件的引用?

git ref ls-remote
1个回答
0
投票

您可以使用这个单行 shell 脚本来执行此操作(您也可以在 Windows 上使用它,例如使用 Git Bash):

git ls-remote --refs | grep refs/merge-requests/ | cut -f 2 | xargs -I {} git push --delete origin {}

它:

  • 检索远程参考,
  • 然后用
    grep refs/merge-requests/
    过滤它们,仅包含包含
    refs/merge-requests/
    ,
  • 的参考文献
  • 然后仅提取参考名称,
  • 然后对每个匹配的引用运行
    git push --delete origin
    以从远程删除它们。

备注:

  • 此解决方案的一个缺点是,这会逐一删除引用,因此可能需要一些时间才能删除数百个远程引用
  • 如果您的遥控器名称不是
    origin
    (尽管可能是)
  • ,请相应地修改脚本
© www.soinside.com 2019 - 2024. All rights reserved.