我有一个相当大的存储库(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导入,包含许多不应存储在存储库中的二进制文件。但是,我想保留提交历史记录和提交日志。为了做到这一点,我试图用文件哈希替换二进制文件的内容,这应该压缩存储库并允许我保留历史记录。
答案 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的作者。