考虑下面的存储库。它有很多用于团队成员的私有分支,都在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/

10-13 09:01