Mercurial存储库如何随时间增长?
假设我创建了一个存储库,向其中添加x文件并提交。假设初始提交后大小为aMbMercurial存储库如何随时间增长?,mercurial,dvcs,Mercurial,Dvcs,假设我创建了一个存储库,向其中添加x文件并提交。假设初始提交后大小为aMb 有没有办法估计一下存储库在一年内会有多大 如果代码行增加了10%,那么存储库是否会相应增加 提交、分支、标记等的数量如何影响存储库的大小 同一年10000次提交是否会使存储库增长(明显)超过1000次提交 也许我的问题措辞错误 如果您担心mushroomin的规模,请克隆一些在线项目并检查其存储库的规模。有很多大型项目可供选择,包括分支提交等。我的经验是git&mercurial非常擅长保持较小的大小,大小反映了您放入
- 有没有办法估计一下存储库在一年内会有多大
- 如果代码行增加了10%,那么存储库是否会相应增加
- 提交、分支、标记等的数量如何影响存储库的大小
- 同一年10000次提交是否会使存储库增长(明显)超过1000次提交
- 也许我的问题措辞错误
- 我认为在x个月后大致估计存储库的大小是可行的,假设您对存储库的总体更改保持稳定的速率(即,您以相同的速率添加/删除/更改文件,每次提交更改的行数大致相同)
- 将代码行数增加10%并不能告诉我们有多少行被删除/更改,因此代码行数的增加不一定与回购规模的增加相同
- 标签对Mercurial回购协议大小的影响不会超过几个字节。分支也不会,直到您开始处理它们,在这一点上,它们会增加与处理尖端相同的开销。承诺数量应与回购规模成合理比例,假设发生相同的变化率
- 经常提交10倍可能不会增加文件大小,因为影响回购大小的主要因素是更改率,而不是提交次数
- 直接估计一年的规模显然是不可能的,除非您对提交的数量和工作树的最终规模有所了解
也就是说,git非常节省磁盘空间。它绝对不会存储一个给定版本的文件的多个副本(在内部表示为blob),较旧的blob会被增量压缩到包中。这意味着它在存储纯文本时非常有效,而在存储大型二进制文件时效率非常低。如果您的项目主要是纯文本,那么几乎可以肯定您没有什么可担心的
分支和标记基本上对大小没有影响。当然,分支的reflog可以达到几KB,但这没什么好担心的。轻量级标记基本上只是一个存储的SHA1,带注释的标记只是在其中添加了一点点元数据
至于代码行数和提交次数,很难说清楚。一般来说,提交比代码行更重要;您可以有多个版本的文件,所有这些文件都在一起(甚至表示为增量),但实际内容只需存储一次。工作树往往比.git目录大得多,这一事实支持了这一点。例如,我克隆的
git.git
有一个17MB的工作树和一个39MB的.git目录。我研究的其他项目也有类似的比率
更多相同大小的提交肯定会使存储库增长得更多,但将1000次提交拆分为10000次(包含相同的更改)不会使存储库变得更大。提交对象本身很小;占用空间的是文件之间的差异。您可能会看到大小的初始峰值,因为提交只是周期性地进行增量压缩,但一旦触发了git gc--auto
,这些提交就会被压缩回去
我能做的最好的概括是,存储库的.git目录的增长速度往往与每次增量的数量成正比,一般来说,增量应该与工作树的大小和人们修改项目的速度成正比。这当然是如此普遍,以至于完全没有帮助,但你就是这样
如果你想估算,我只需要在第一个月左右收集一些数据,然后尝试拟合一条曲线。看看Git wiki上的页面,“存储库大小基准”部分和“其他基准和参考”(考虑到基准是何时制定的,以及它使用的版本),特别是最后一页的条目:
- 由Robert Fendt于2009年1月27日在Linux开发者网络上发布,包含两个综合基准测试的结果,测试系统在压力下的行为(存储库中的提交数量或提交的文件数量) 测试系统是一个运行Ubuntu 8.10的虚拟机,使用的软件版本有SVK 2.0.2(最后一个是2.2.3)、darcs 2.1.0(最后一个是2.4.4)、单调0.42(最后一个是0.48)、Bazaar 1.10(最后一个是2.2.1)、Mercurial 1.1.2(最后一个是1.6.4)和Git 1.6.1(最后一个是1.7.3)