Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mercurial存储库如何随时间增长?_Mercurial_Dvcs - Fatal编程技术网

Mercurial存储库如何随时间增长?

Mercurial存储库如何随时间增长?,mercurial,dvcs,Mercurial,Dvcs,假设我创建了一个存储库,向其中添加x文件并提交。假设初始提交后大小为aMb 有没有办法估计一下存储库在一年内会有多大 如果代码行增加了10%,那么存储库是否会相应增加 提交、分支、标记等的数量如何影响存储库的大小 同一年10000次提交是否会使存储库增长(明显)超过1000次提交 也许我的问题措辞错误 如果您担心mushroomin的规模,请克隆一些在线项目并检查其存储库的规模。有很多大型项目可供选择,包括分支提交等。我的经验是git&mercurial非常擅长保持较小的大小,大小反映了您放入

假设我创建了一个存储库,向其中添加x文件并提交。假设初始提交后大小为aMb

  • 有没有办法估计一下存储库在一年内会有多大

  • 如果代码行增加了10%,那么存储库是否会相应增加

  • 提交、分支、标记等的数量如何影响存储库的大小

  • 同一年10000次提交是否会使存储库增长(明显)超过1000次提交

  • 也许我的问题措辞错误


如果您担心mushroomin的规模,请克隆一些在线项目并检查其存储库的规模。有很多大型项目可供选择,包括分支提交等。我的经验是git&mercurial非常擅长保持较小的大小,大小反映了您放入其中的文件(以及它们的大小)而不是开销。

对Mercurial存储库的更改存储为完整文件或压缩增量,与以前的版本相比:

Mercurial根据所做更改的数量决定是否存储完整文件或增量

这意味着,不仅要添加增加存储库总大小的代码行,还要:

  • 对现有代码所做的更改数
  • 每次提交对每个文件所做的更改数
  • 添加和随后删除的文件数
  • Mercurial保留所有已删除的文件。您可以将1GB文件添加到存储库中,然后将其删除;行数没有增加,但由于文件仍保留在存储库中,存储库将大大增加

    依次回答您的问题:

    • 我认为在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)

        这真的应该是tw