gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 14:44:22 26 4
gpt4 key购买 nike

考虑以下存储库。它有很多团队成员的私有(private)分支,都在 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/*,但这些私有(private)分支只是压倒了我的 refs/remote/golden命名空间,使其更难概览,并且还需要更多空间用于本地存储库。

是否可以获取 refs/heads/*,但排除 refs/heads/team/*

最佳答案

很遗憾,没有。

幸运的是,您可以任意接近,特别是如果您愿意每次都使用两次提取,或者一次提取然后删除一次(这实际上可能更有效,或者至少更省时;它可能需要更多空间,具体取决于有多少对象最终变得无用)。

本质上,这里的想法是通过首先运行 git ls-remote 然后进行您自己的过滤并重写 fetch = 条目来列出要获取的所有内容(好吧,条目)对于 Remote :

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 组 merge 遵守 所有 fetch = 行。

对于另一个想法,运行一个正常的 (+refs/heads/*:refs/remotes/...) fetch 然后是一系列 git update-ref -d refs/remotes/$remote/${ref#refs/heads/} 用于匹配不需要的形式的引用。如果您愿意,可以在之后加入 git gc(或 git repack 和/或 prune)以缩小存储库。

关于git - 忽略 git refspec 中的单个命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36788421/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com