为什么我的Git存储库比Mercurial版本大得多?

时间:2011-08-06 22:26:50

标签: git mercurial

我已经使用快速导出将Mercurial存储库转换为Git。但Git存储库非常庞大:Git为18 GB,Mercurial为3.4 GB。我的清理步骤都没有帮助。

My Mercurial存储库由一个65 MB文件(SQLite格式的Anki抽认卡)主导,每天更新。它的历史已增长到2.9 GB,低于.hg / store / data。

我希望Git能够更好地压缩历史记录,但我无法将存储库缩小到18 GB以下!

我尝试了git prunegit gc和其他人,但无济于事。我甚至试过压缩.git文件夹,它仍然是18 GB。

我错过了什么吗?

更新:我尝试了Bazaar(bzr),它将我的存储库压缩到只有2.3 GB。尼斯!

3 个答案:

答案 0 :(得分:9)

一个原因可能是Mercurial具有非常紧凑的存储格式,即使对于二进制文件也会涉及差异。由于使用差异重新创建版本可能非常耗时,因此只要差异+旧原始版本超过完整快照大小的两倍,它就会存储完整快照。

就个人而言,我会尝试存储sqlite数据库的转储而不是数据库文件本身,并查看它的位置。它可能效率更高。

我不知道git的存储格式是什么。但我猜它不会像Mercurial那样涉及差异。

答案 1 :(得分:7)

如果git gc失败,请尝试手动运行git repack,然后git gc


我对SVN,Git和Hg的观察:

我一直观察到SVN和Hg存储库比相应的git存储库小得多。这是因为每次更改文件(文本或二进制文件)都会为其添加新的完整对象。在SVN中,即使在二进制文件的情况下也只添加了差异,并且SVN中的二进制差异也非常好。

但这是包文件的来源,因为它们只在相似的对象中存储diff(delta),甚至是压缩的。即使有打包,我观察到Git存储库,取决于文件的类型和这些文件所经历的更改量,往往更大。这是我接受Git接受的事情,考虑到Git的各种操作有多快,我愿意接受这种妥协。

答案 2 :(得分:0)

从Mercurial迁移的存储库上运行git gc --aggressive为我工作。它从500 MB减少到150 MB。