我已经使用快速导出将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 prune
,git gc
和其他人,但无济于事。我甚至试过压缩.git文件夹,它仍然是18 GB。
我错过了什么吗?
更新:我尝试了Bazaar(bzr),它将我的存储库压缩到只有2.3 GB。尼斯!
答案 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。