考虑下面的存储库。它有很多用于团队成员的私有分支,都在refs/heads/team/
名称空间下,我不想获取这些分支,但是我仍然想获取所有剩余的分支,包括该team
名称空间之外任何可能新创建的分支。
$ git ls-remote http://gerrit.asterisk.org/asterisk refs/heads/* | wc -l
217
$ git ls-remote http://gerrit.asterisk.org/asterisk refs/heads/* | grep -v refs/heads/team/ | wc -l
32
我正在获取
fetch = +refs/heads/*:refs/remotes/golden/*
,但这些私有分支正在压倒我的refs/remote/golden
命名空间,使其难以概述,并且还需要更多的空间用于本地存储库。是否可以获取
refs/heads/*
,但排除refs/heads/team/*
? 最佳答案
不幸的是,没有。
幸运的是,您可以任意接近,特别是如果您愿意每次使用两次获取,或者每次获取后使用一个delete传递(这可能实际上会更有效,或者至少更节省时间;这可能需要更多的空间,这取决于有多少对象最终变得无用)。
基本上,这里的想法是列出所有要采取的措施,首先运行git ls-remote
,然后进行自己的筛选并重写远程的fetch =
条目(嗯,条目):
git ls-remote "$remote" 'refs/heads/*' |
(git config --unset-all "remote.$remote.fetch";
while read hash ref; do
case $ref in refs/heads/team/*) continue;; esac
rmtref="refs/remotes/$remote/${ref#refs/heads/}"
git config --add "remote.$remote.fetch" "+$ref:$rmtref"
done)
git fetch "$remote"
(添加一些前端工作以适当设置
$remote
)。实现这一点的关键是git合并并遵循所有fetch =
行。另一种方法是,运行一个普通的(
+refs/heads/*:refs/remotes/...
)获取,然后运行一系列与不需要的表单匹配的引用。如果愿意的话,可以在后面加上一个git update-ref -d refs/remotes/$remote/${ref#refs/heads/}
(或者git gc
和/或修剪)来缩小存储库。关于git - 忽略git refspec中的单个 namespace ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36788421/