将(大型)二进制文件保存在Git存储库中是否会影响除克隆之外的操作的性能?

时间:2015-07-13 10:40:09

标签: git

我已经阅读了有关在Git存储库中存储二进制文件的现有问题,但有些方面仍然不明确。

存储库包含大约50 MB的代码源和大约1 GB的二进制文件。二进制文件很少更改。

  1. 通常的日常工作流程的性能是否会受到二进制文件的负面影响?像提交更改,移动,移动和更改文件等操作;合并;拉动和推动。有问题的操作不涉及所述二进制文件。
  2. 从性能的角度来看(例如RAM,CPU,HDD访问)是否有从选择分支中删除这些文件的任何优点?而不是从存储库及其历史记录中完全删除文件。

2 个答案:

答案 0 :(得分:10)

如果文件从不,则在性能方面没有任何差别 每个提交都标记修改后的文件,因此当提交它时,应用未标记在其中的文件,它们并不重要,无论它们是1Kb还是1 Gb。如果文件出现在提交中,那么显然很重要,因为typically二进制文件处理速度较慢 现在,主要问题是克隆存储库不是涉及应用提交的唯一操作。例如,当您更改为不同的分支时,git必须删除所有提交的应用程序,直到公共提交,然后应用其他分支的所有提交,直到达到所需的签出提交,或者合并或重新定位git必须分析所有提交找出差异。
基本上,每当必须通过git读取包含对二进制文件的修改的提交时,性能很可能会受到影响,并且由于git的工作方式,提交会经常“使用”。
关于你的问题,它基本上取决于你的意思是“很少改变”。只要您通常使用的分支机构没有对二进制文件进行修改,这应该不是问题,但如果您在检查不同的提交时进行了跟踪修改,则性能会受到影响。

答案 1 :(得分:4)

它可以影响像git gcgit repack这样的操作,在那里完成整理。请参阅“Are Git's pack files deltas rather than snapshots?”。

这就是为什么我通常在版本控制中只存储一个文本文件声明在哪里找到我需要的二进制文件,而不是存储二进制文件本身。请参阅“git include compiled dll from another repository”作为示例。