我有一个包含数千个遥控器的仓库,我想同时从数千个遥控器中取出,理想情况下我可以指定同时执行的最大数量。
我无法在联机帮助页,谷歌或git-scm在线找到与此相关的任何内容。
非常清楚:我不想在多个repos上运行一个命令,我有一个带有数千个遥控器的仓库。
这与子模块无关,不要谈论子模块。子模块与git遥控器无关。
答案 0 :(得分:5)
我很确定你必须编写自己的代码才能做到这一点。
作为CodeWizard says in a comment,Git需要锁定存储库的一部分。如果您只是在一个存储库中并行运行多个git fetch
进程,则其中一些锁有时会发生冲突。
您可能还需要某种远程排序策略,因为例如并行收集remoteA
,remoteB
和remoteC
可能会在{{1}上发现10000个常见对象如果remoteB
通常(但不总是)是remoteB
和remoteA
的超集,则与其他两个相比。 1 虽然这也适用于顺序{ {1}}操作,它变得相当不重要。例如,假设有5000个对象 - 一些提交,一些树和一些blob-在A上你还没有,在C上有5000个其他,在B上有10000个。如果你以任何顺序依次获取,你拿到5k,然后是5k,然后是0;或者10k,然后是0,然后是0;因为当您移动到 next 遥控器时,您已经收集并存储了5k或10k个传入对象。但是,如果你并行完成所有三个对象,你将带来5k,5k和10k对象,只有然后发现你的工作量增加了一倍。
1 如果B 总是超集,只需先转到B(顺序),然后并行转到A和C 仅用于引用< / em>,它将指向您现在拥有的对象。
答案 1 :(得分:4)
从Git 2.24到now possible,并选择[--jobs]
。
一些例子:
获取3个遥控器,将并行获取2个遥控器:
git fetch -j2 --multiple remote1 remote2 remote3
获取所有遥控器,将并行获取5个遥控器:
git fetch -jobs=5 --all
如果您有成千上万个遥控器,而又不想下载所有它们,那么它们会构成一些逻辑组。您也可以在.git / config
中定义这样的远程组,而不用在命令行中(使用--multiple
来指定它们)
[remotes]
group1 = remote1 remote2 origin
group2 = remote55 remote66
然后在获取命令中使用该组。
此命令:git fetch --multiple -j4 group1 group2 remote10
提取remote1 remote2 origin remote55 remote66 remote10
个遥控器,并并行完成4个提取。
答案 2 :(得分:-2)
我有一个拥有数千个遥控器的回购
这就是你要找的东西:
git fecth --all --prune
--all
获取所有遥控器。
它将从所有遥控器获取并更新您的repo数据。 (分支,标签和数据)
--prune
在获取之前,删除遥控器上不再存在的所有远程跟踪引用。
如果由于默认标记自动跟踪或由于--tags选项而导致标记仅<> strong>,则不会对标记进行修剪。但是,如果由于显式refspec(在命令行或远程配置中,例如,如果使用--mirror选项克隆远程)来提取标记,则它们也会受到修剪。