考虑以下存储库。它有很多团队成员的私有分支,都在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
Run Code Online (Sandbox Code Playgroud)
我正在获取fetch = +refs/heads/*:refs/remotes/golden/*,但这些私有分支只是压垮了我的refs/remote/golden命名空间,使其更难以概览,并且还需要更多空间用于本地存储库。
是否可以获取refs/heads/*但排除refs/heads/team/*?
很不幸的是,不行。
幸运的是,您可以任意接近,特别是如果您愿意每次都使用两遍提取,或者提取后跟删除遍(可能这实际上会更有效,或者至少是时间效率;它可能需要更多的空间,取决于有多少对象最终变得无用)。
本质上,这里的想法是列出要采取的所有内容,首先运行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"
Run Code Online (Sandbox Code Playgroud)
(添加一些前端工作以进行$remote适当设置)。使这项工作成功的关键是 git 组合并遵守所有行fetch =。
对于另一个想法,运行正常的 ( +refs/heads/*:refs/remotes/...) 获取,然后运行一系列与git update-ref -d refs/remotes/$remote/${ref#refs/heads/}不需要的形式匹配的 for 引用。如果您愿意,可以稍后添加git gc(或git repack和/或修剪)以缩小存储库。
| 归档时间: |
|
| 查看次数: |
1147 次 |
| 最近记录: |