在当前项目中,测试人员经常将各种小文本文件放入代码库中。他们中的大多数都有10KB的大小,而且每天的数量都在增加。目前,已有超过6000个文件,我认为在不久的将来它将是10000个。
我们觉得git越来越慢。我们在cygwin中运行git,这使得它更慢。
以下是现在某些操作的成本:
我们每天都在基本的git操作上浪费大量时间。
我们正在寻找原因,尝试解决它。所以我想知道这些小文本文件是否是原因。
如果它们是最大的原因,我们可以通过删除它们来修复它吗?或者我们必须在git服务器中删除它们(如果可能),或者创建一个新的git repo?
答案 0 :(得分:3)
没有理由将它们从版本控制中删除,甚至没有提及从历史记录中删除它们。
Git本身速度快,文件数量多于此数量级。减慢速度的组件是操作系统。在枚举磁盘上的文件时,Windows简直太糟糕了。不幸的是,Cygwin只会让事情变得更糟,因为要提供完整的Unix兼容性,它必须进行额外的系统调用,如果使用Windows api则不需要。
Git需要枚举文件并在每次运行状态时查找修改时间,这也包含在提交中。在某些shell完成的情况下也会这样做。
好消息是你可以告诉git不要在特定文件中查找更改。如果您不需要修改文件,您只需告诉git不要使用
检查其时间戳git update-index --assume-unchanged path...
文件仍然存在,你甚至可以修改它们,就在你这样做的时候,你必须明确地调用它们,因为git不会注意到这一点。
您也可以使用
停止检查它们git add
这将阻止git更新目录。同样,您仍然可以使用显式git update-index --skip-worktree path...
添加新文件或新文件,但它甚至不会检查存储库版本。如果文件已经签出,那么git会在那里留下过时的版本,所以请记住你在做什么。
有关详细信息,请参阅git-update-index(1)。
应该注意的是,在任何条件下,Windows上的git明显比大多数Unices慢。在一个相当大的存储库,比如20 000个文件,计算机启动后的第一个状态通常需要一段时间,但是在Linux上,一旦文件元数据被缓存,状态几乎是瞬间的,而在Windows上它总是需要几秒钟。
这不仅仅是git。 Windows上的Subversion状态同样较慢,而且旧版本的元数据也分布在许多文件上甚至更多。
答案 1 :(得分:1)
它变慢的主要原因是因为Git需要为许多常见操作统计数千个签出文件。在类Unix系统上统计操作非常快,但在Windows上通常很慢(取决于使用的API,但最快的API在修改时间,时区和夏令时时移和can't be used with Git方面存在问题)和我认为cygwin的Git比msysGit慢。
使用git rm
删除文件并保留历史记录可以显着改善这种情况。在过去的提交中拥有数万个文件对大多数Git操作没有任何影响。