在git中,是否可以并行获取多个遥控器?
下面的工作是否会与存储库中的git文件锁定冲突。
git config gc.auto 0
git remote |xargs --max-procs=4 -n 1 git fetch
git gc
我对几个存储库进行了小测试,当所有存储库彼此无关时,它似乎有效。
如果有明确的技术原因上面的并行获取命令不起作用,那么获得反馈会很好。
子模块支持并行获取,但是当使用git-subtree方法时,并行获取会很好。
答案实际上可能是。特别是:
git remote | xargs --max-procs=4 -n 1 git fetch
正如您所见,这实际上在经过测试时可以正常工作。我曾经写过一个同样类型的花哨版本(对获取过程的花哨显示控制,都是用Python编写的 - 但事实证明git fetch --progress
中有一个错误,所以这对管道不起作用;你必须使用ptys)。
没有与git文件锁定冲突...它似乎在所有存储库彼此无关时起作用。
这就是问题:每次获取都假定它可以获得锁定。提取需要锁定每个远程跟踪名称,通常这很好,因为名称是单独的 - 远程A
不会干扰远程B
因为refs/remotes/A/master
和refs/remotes/B/master
使用不同的锁 - 但最终的重新包装可能会失败,除非你做你做的事情做了,禁用auto-gc
然后自己运行GC(之后你也应该重新渲染它)。
您最终可能会获取超出必要的数据(正如我在另一个答案中所述)。没有外部信息,你可以做很多事情,例如,也许你应该首先获取一个遥控器。