我的 Git 中添加了许多遥控器。每个遥控器都是一个开发人员的存储库。每天我
fetch --all
都会看到他们创建的任何可供审查的新分支。
但是,开发人员可以将“私有”分支推送到远程。比如说,所有以下划线前缀命名的分支都尚未准备好审查,而其他分支已准备好审查。
当执行
git fetch --all
时,我的 Git 图(由 /libexec/git-core/git-gui
)将看到所有分支,无论它们是否有下划线前缀。它使图表变得复杂。
我希望
git fetch
忽略那些被下载到本地 Git 的 _XXXX
分支。所以当我查看 Git 图表时,它就像:
RemoteA/Branch1
, RemoteB/Branch1
, RemoteB/Branch2
RemoteA/_Branch2
、RemoteB/_Branch3
我该怎么做?
通过 Git v2.29 中添加的负引用规范、1,您可以在不改变同事习惯的情况下实现您的初衷。
对于每个同事的遥控器,添加一个负引用规范(即以
^
为前缀)以排除以 _
为前缀的分支。这大致改编自.git/config
的单元测试和负模式的单元测试。请参阅下面代码块中的最后一行“Fred”遥控器。
[remote "fred"]
url = something.git
fetch = +refs/heads/*:refs/remotes/fred/*
fetch = ^refs/heads/_*
您有两个选项可以在命令行上为
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/*
您可以将其更改为
[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
执行此操作后,您可能必须清理对已获取的引用的引用,但未来的
git fetch --all
或 git fetch fred
不会更新您指定的模式之外的任何内容。
1 关于负引用规范的文档很少,并且埋藏在较长的段落中,因此最好的查找位置是Git 的历史或VonC 对另一个问题的回答,他在那里提取了相关部分放在一起。
2 或者根据需要添加任意数量的特殊或有趣的文件夹和分支。
您可以使用命名空间,而不是使用“
_
”命名约定,将分支推送到 origin/review/Branch1
(git push Branch1:review/Branch1
)
git fetch +refs/heads/review/*:refs/remotes/origin/review/*
git ls-remote origin
~/.gitconfig
文件中:
[alias]
fall = !sh -c 'git fetch --all && git branch -r | sed /HEAD/d | grep /_ | xargs git branch -dr' --
然后就说git fall
。它将删除所有包含
/_
的远程分支。您可以观察 shell 命令别名的复杂性。
ignore-refs
选项:
git fetch --ignore-refs branch123