我在Git中添加了许多远程控件。每个远程控件都是一个开发人员的仓库。每天我都fetch --all
查看他们创建的任何新分支。
然而,开发人员可以将“私有”分支推送到远程,比如说,所有以下划线前缀命名的分支都没有准备好评审,而其他分支已经准备好评审了。
当执行git fetch --all
时,我的Git图(/libexec/git-core/git-gui
)会看到所有分支,无论它们是否有下划线前缀。
我想让git fetch
忽略那些_XXXX
分支,以免它们被下载到本地Git。所以当我查看Git图表时,它就像这样:
*显示分支:RemoteA/Branch1
、RemoteB/Branch1
、RemoteB/Branch2
*忽略分支:RemoteA/_Branch2
、RemoteB/_Branch3
我该怎么做呢?
4条答案
按热度按时间fjnneemd1#
针对Git v2.29.0的更新
在Git v2.29中添加了negative refspecs,1,你可以在不改变同事习惯的情况下实现自己的初衷。
对于每个同事的remote,添加一个负refspec(即前缀为
^
)来排除前缀为_
的分支。这是从.git/config
的单元测试和负模式的单元测试中松散改编而来的。请参见下面代码块中“Fred's”remote的最后一行。在命令行上,您可以使用两个选项为
fred
设置此设置:git config --add remote.fred.fetch '^refs/heads/_*'
git remote set-branches --add fred '^refs/heads/_*'
原始答案
在VonC's excellent answer上扩展一个特殊的“review”文件夹2,你可以修改你的
.git/config
的条目给你的同事的遥控器。它曾经在的地方
您可以将其更改为
完成此操作后,您可能必须清除对已获取的refs的引用,但未来的
git fetch --all
或git fetch fred
将不会更新指定模式之外的任何内容。[1]关于负refspecs的文档很少,而且被淹没在较长的段落中,所以最好的地方是in Git's history或VonC's answer to a different question,在那里他将相关部分放在一起。
2或者你需要多少特殊或有趣的文件夹和分支。
xvw2m8pv2#
您可以使用名称空间,而不是使用'
_
'命名约定,将分支推入origin/review/Branch1
(git push Branch1:review/Branch1
)(命名为“组”in that answer,或that answer中的“分层分支名称(带斜线的分支名称)”)
这样的话,你只需要获取“review”名称空间中的内容:
唯一的其他选择是脚本,它将:
git ls-remote origin
zf9nrax13#
您可以使用别名一步完成。将以下内容添加到您的
~/.gitconfig
文件中:字符串
然后输入
git fall
,它会删除所有包含/_
的远程分支。您可以观察到shell命令别名的复杂性。
b4wnujal4#
您可以使用
ignore-refs
选项: