1

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

4

1 回答 1

3

您想使用BFG Repo-Cleaner,这是一种更快、更简单的替代方案,git-filter-branch专门用于从 Git 存储库中删除大文件。

下载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 通常比运行快10-50git-filter-branch倍,并且这些选项是围绕以下两个常见用例量身定制的:

  • 删除疯狂的大文件
  • 删除密码、凭证和其他私人数据

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

于 2013-04-16T08:24:08.667 回答