Git 将子模块更改推送到原点时速度很慢

Git is slow on pushing submodules change to origin

我正在使用 git,其中我有一个包含大约 40 (!) 个子模块存储库的存储库。

每当我执行 git git push origin master 时,remote: Processing changes 操作都非常慢。

有什么办法可以加快推送速度吗? Gerrit 用作后端,但我覆盖了 HEAD:refs/for/master 以短路审查机制。

PS。我知道我有很多子回购协议,这可能不是最佳选择,但事实就是如此,问题不在于此:-)

确定发现问题:

顶级仓库正在跟踪 master 分支。这意味着当我在每个子仓库中推送到原点时,顶级仓库会自动更新(在 Gerrit 中)。

我不明白这一点,所以我也对顶级回购进行了推送,这导致处理时间很长。

不知道为什么。

Is there any way I can speed up the push?

在下一个 git 2.12.0(2017 年第一季度)中,该过程(测试是否需要推送子模块)将快得多

参见commit 250ab24, commit 5b6607d, commit 9cfa1c2, commit 1473944 (16 Nov 2016) by Heiko Voigt (hvoigt)
(由 Junio C Hamano -- gitster -- in commit af952da 合并,2016 年 12 月 16 日)

serialize collection of changed submodules

To check whether a submodule needs to be pushed we need to collect all changed submodules. Lets collect them first and then execute the possibly expensive test whether certain revisions are already pushed only once per submodule.

There is further potential for optimization since we can assemble one command and only issued that instead of one call for each remote ref in the submodule.