Mercurial:轻量级复制/重命名

时间:2011-05-11 05:25:17

标签: mercurial

来自Mercurial wiki - GSoC Ideas 2010

  

项目创意

     

轻量级复制/重命名

     

(非常困难 - 一个成功的学生   将成为Mercurial的专家   存储格式和传输   协议)

     

目前没有复制和重命名   效率太高了。 Mercurial复制了   将源文件复制/重命名为新文件   初始修订目标文件   它的内部历史商店。对于   重命名,这是特别的   反直觉,重命名一个大   file通过文件增长存储   尺寸。如果Mercurial会更好   有一些方法可以参考   新文件的现有修订版,   同时保持倒退   兼容性和有界I / O.   保证检索修订。   有关讨论,请参阅issue883。   有一个旧的尝试mq   这位于here

对不起,如果这是一个显而易见的问题(我不擅长英语和编程)。我想知道,“轻量级复制”是什么意思?

是不是意味着:当实现此功能时,具有相同内容的多个文件(相同的哈希值,不同的文件名)将仅存储在存储库中一次(就像Git一样)?


更新

感谢大家的回答。 Mercurial的开发者之一 - tonfa也在this answer的评论中回答了这个问题:

  

穴居人:轻量级副本时   实现后,将两个文件相同   内容(相同的哈希值不同   名称)只在存储库中存储一次   (就像Git一样)?

     

tonfa:不,这个功能没有计划   (它会破坏其他优化   最小化磁盘访问)

2 个答案:

答案 0 :(得分:4)

现在,当您复制文件时,会在存储库中创建一个新文件,其中包含您刚刚复制的文件的压缩快照。我们的想法是设置它,以便副本以某种方式引用旧文件,然后根据它创建revlog条目,而不是必须有自己的快照来基于revlog条目。

这不会像git的工作方式。改变Mercurial以这种方式工作将非常有趣,而不是最简单的命题。

答案 1 :(得分:2)

我最好说复制/重命名的文件不会像现在这样存储两倍的空间,但只会指向相同的版本。

对于使用相同内容单独添加的文件,不确定是否属实。根据描述,它们将被视为完全独立的文件,占用2倍的空间。