如何优化git update-index?

时间:2012-08-29 13:30:39

标签: performance git optimization git-filter-branch git-rewrite-history

我有一个相当大的存储库(11 GB,900,000+个文件),并且在合理的时间内无法进行迭代。经过一些分析后,真正的瓶颈似乎是git update-index:

$ time git update-index --replace $path > /dev/null

real    0m5.766s
user    0m1.984s
sys     0m0.391s

这使得获取文件列表的天数难以忍受。有没有办法加快更新索引操作?

对于它的价值,我在Windows 7上运行cygwin。

编辑:为问题添加更多背景信息。

大型存储库来自SVN导入,包含许多不应存储在存储库中的二进制文件。但是,我想保留提交历史记录和提交日志。为了做到这一点,我试图用文件哈希替换二进制文件的内容,这应该压缩存储库并允许我保留历史记录。

1 个答案:

答案 0 :(得分:2)

您希望使用BFG Repo-Cleaner,这是git-filter-branch的一种更快,更简单的替代方案,专门用于从Git repos中删除大文件

下载BFG jar(需要Java 6或更高版本)并运行此命令:

$ java -jar bfg.jar  --strip-blobs-bigger-than 1MB  my-repo.git

任何超过1MB的文件(不在最新提交中)都将从Git存储库的历史记录中删除,并替换为包含.git-id文件>原始文件的旧Git hash-id (与替换二进制文件的内容与文件哈希问题的要求相匹配)。

然后,您可以使用git gc清除死亡数据:

$ git gc --prune=now --aggressive

BFG通常比git-filter-branch 10-50x快{{3}},并且这些选项围绕这两种常见用例进行了定制:

  • 删除疯狂大文件
  • 删除密码,凭据&其他私人数据

完全披露:我是BFG Repo-Cleaner的作者。