忽略git refspec中的单个命名空间

时间:2016-04-22 08:11:33

标签: git git-refspec

考虑以下存储库。它有很多团队成员的私有分支,都在refs/heads/team/命名空间下,我不想获取,但我仍然想要获取所有其余的,包括任何可能新创建的分支{ {1}}命名空间。

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/*

1 个答案:

答案 0 :(得分:3)

不幸的是,没有。

幸运的是,你可以随意关闭,特别是如果你愿意每次都使用两遍获取,或者获取后跟一个删除传递(可能这实际上会更有效,或者至少是时间效率;它可能需要更多的空间,这取决于有多少物体变得无用)。

基本上,这里的想法是列出要采取的一切,首先运行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 repack和/或修剪)之后折叠存储库。