当git fetch --all时,如何忽略被复制到本地git的一些分支/标签

pal*_*ain 6 git git-fetch git-branch

我有很多遥控器添加到我的git.每个远程程序都是一个开发人员的存储库 每天我都会fetch --all看到他们创建的任何新分支都可以查看.

但是,开发人员可以将"私有"分支推送到远程.比如,所有以下划线前缀命名的分支都没有准备好进行审核,而其他分支已准备好进行审核.

在执行此操作时git fetch --all,我的git图(by /libexec/git-core/git-gui)将看到所有分支,无论它们是否具有下划线前缀.它使图表复杂化.

我想git fetch忽略那些_XXXX分支被下载到我的本地git.所以当我查看git图时,它就像:

  • 可见分支: RemoteA/Branch1,RemoteB/Branch1,RemoteB/Branch2
  • 忽略分支: RemoteA/_Branch2,RemoteB/_Branch3

我怎样才能做到这一点?

Mic*_*ael 10

Git v2.29.0 更新

随着负refspecs1 Git中添加V2.29,你可以实现你的原意,而无需改变你的同事的习惯。

对于每个同事的遥控器,添加一个否定^_refspec (即以 为前缀)以排除 -前缀的分支。这是从单元测试.git/config负面模式的单元测试中松散地改编。有关“Fred 的”遥控器,请参阅下面代码块中的最后一行。

[remote "fred"]
    url = something.git
    fetch = +refs/heads/*:refs/remotes/fred/*
    fetch = ^refs/heads/_*
Run Code Online (Sandbox Code Playgroud)

您有两个选项可以fred在命令行上进行设置:

  • git config --add remote.fred.fetch '^refs/heads/_*'
  • git remote set-branches --add fred '^refs/heads/_*'

原答案

使用特殊的“评论”文件夹扩展VonC 的出色答案2您可以修改.git/config同事遥控器的条目。这是相关的文档

曾经在哪里

[remote "fred"]
    url = something.git
    fetch = +refs/heads/*:refs/remotes/fred/*
Run Code Online (Sandbox Code Playgroud)

你可以把它改成

[remote "fred"]
    url = something.git
    fetch = +refs/heads/review/*:refs/remotes/fred/review/*
    fetch = +refs/heads/other_pattern/*:refs/remotes/fred/other_pattern/*
    fetch = +refs/heads/specific_branch:refs/remotes/fred/specific_branch
Run Code Online (Sandbox Code Playgroud)

这样做之后,您可能必须清除对已获取的 refs 的引用,但 future git fetch --alls 或git fetch freds 不会更新您指定的模式之外的任何内容。


1截至 2021 年 8 月 30 日,仍然没有关于负面 refspecs 的文档,因此最好查看Git 的历史记录
2或者您需要的任意数量的特殊或有趣的文件夹/分支。


Von*_*onC 5

而不是使用的" _"命名约定,你可以使用命名空间,推动分公司origin/review/Branch1(git push Branch1:review/Branch1)
("第一组" 在这个问题的答案,或"分层分支名称(分支名以斜杠)这个答案)

这样,您只需要获取"review"命名空间中的内容:

git fetch +refs/heads/review/*:refs/remotes/origin/review/*
Run Code Online (Sandbox Code Playgroud)

唯一的另一种选择是脚本,它将: