当跟踪大型二进制文件时,git非常慢。

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

我的项目已经有六个月的历史了,而且GIT非常慢。我们跟踪大约30个文件,大小为5MB到50 MB。这些是二进制文件,我们把它们保存在git中。我相信那些文件让盖特变慢了。

是否有方法从存储库中杀死所有大小大于5MB的文件。我知道我会丢失所有这些文件,这对我来说没问题。

理想情况下,我想要一个命令来列出所有的大文件(>5MB)。我可以看到列表,然后我说:好,继续删除这些文件,使git更快。

我应该指出,git不仅在我的机器上运行缓慢,而且在暂放环境上部署该应用程序现在需要大约3个小时。

因此,修复应该会影响服务器,而不仅仅是存储库的用户。

提问于
用户回答回答于

解释

Git非常擅长于大量的小文本文件历史,因为它能够高效地存储它们及其变化。同时,git在二进制文件方面非常糟糕,它将天真地存储文件的单独副本。存储库变得巨大,然后就会变得缓慢,正如所观察到的。

这是DVCS中的一个常见问题,因为每次克隆时都会下载每个文件的每个版本(“整个存储库”),这使问题更加严重。

此命令将列出当前大小>=5MB目录下的所有文件。

find . -size +5000000c 2>/dev/null -exec ls -l {} \;

如果要从存储库的整个历史记录中删除文件,可以使用以下方法git filter-branch以了解历史并清除所有大型文件的痕迹。完成此操作后,所有新的库克隆都将更加精简。

git filter-branch --index-filter \
    'find . -size +5000000c 2>/dev/null -exec git rm --cached --ignore-unmatch {} \;'

用户回答回答于

git gc

这在速度上产生了很大的差异,即使是对小规模的回购也是如此。

扫码关注云+社区