缓慢的Git操作

dro*_*del 5 git

我有一个我放在Git下的测试库.大多数文件非常小,但是它们数量非常多,只需要几十分钟即可完成Git操作,如添加和状态.我有什么选择将这些置于修订控制之下并获得合理的性能?我应该尝试使用子模块还是应该避开DVCS?

Lil*_*ard 13

Git操作喜欢addstatus要求stat文件系统中的每个文件(以检测更改).您要么拥有真正大量的文件(例如,数十或数十万个文件),要么您的文件系统stat运行速度相当慢.

在任何情况下,如果你需要在一个非常慢的系统上工作,你可以使用索引中的"假设未更改"位,这会告诉Git不要打扰stat文件.如果你打开它,你需要手动指示git获取单个文件中的更改,例如直接传递给它们git add,否则Git甚至不会知道任何改变.你可以通过设置git config core.ignoreStat true然后运行类似的东西来打开它git reset --hard HEAD.


eis*_*eis 7

我想知道什么是"非常大"的数字.通常它不是git发现麻烦但是大二进制文件的小文件数量.但是,我可以想象,如果数量足够大,您可能希望将它们分成几个存储库 - 通过子模块或其他方式.如果他们需要驻留在一个单独的仓库中,您可能会发现Subversion更具性能.

编辑:好的,所以你添加了注释,你使用NFS挂载,这听起来像这里可能的瓶颈.请在此主题中检查解决方案.特别是core.preloadindex可能会引起人们的兴趣.

文档:

core.preloadindex

为git diff等操作启用并行索引预加载

这可以加快像git diff和git status这样的操作,特别是在像NFS这样具有弱缓存语义和因此相对较高的IO延迟的文件系统上.将此设置为true,git将并行执行与文件系统数据的索引比较,从而允许重叠IO.

EDIT2:在评论中提到了600万个文件.我可以理解这成为一个瓶颈 - 这确实是非常大的数量.