来自Mercurial wiki - GSoC Ideas 2010:
项目创意
轻量级复制/重命名
(非常困难 - 一个成功的学生 将成为Mercurial的专家 存储格式和传输 协议)
目前没有复制和重命名 效率太高了。 Mercurial复制了 将源文件复制/重命名为新文件 初始修订目标文件 它的内部历史商店。对于 重命名,这是特别的 反直觉,重命名一个大 file通过文件增长存储 尺寸。如果Mercurial会更好 有一些方法可以参考 新文件的现有修订版, 同时保持倒退 兼容性和有界I / O. 保证检索修订。 有关讨论,请参阅issue883。 有一个旧的尝试mq 这位于here。
对不起,如果这是一个显而易见的问题(我不擅长英语和编程)。我想知道,“轻量级复制”是什么意思?
是不是意味着:当实现此功能时,具有相同内容的多个文件(相同的哈希值,不同的文件名)将仅存储在存储库中一次(就像Git一样)?
更新
感谢大家的回答。 Mercurial的开发者之一 - tonfa也在this answer的评论中回答了这个问题:
穴居人:轻量级副本时 实现后,将两个文件相同 内容(相同的哈希值不同 名称)只在存储库中存储一次 (就像Git一样)?
tonfa:不,这个功能没有计划 (它会破坏其他优化 最小化磁盘访问)
答案 0 :(得分:4)
现在,当您复制文件时,会在存储库中创建一个新文件,其中包含您刚刚复制的文件的压缩快照。我们的想法是设置它,以便副本以某种方式引用旧文件,然后根据它创建revlog条目,而不是必须有自己的快照来基于revlog条目。
这不会像git的工作方式。改变Mercurial以这种方式工作将非常有趣,而不是最简单的命题。
答案 1 :(得分:2)
我最好说复制/重命名的文件不会像现在这样存储两倍的空间,但只会指向相同的版本。
对于使用相同内容单独添加的文件,不确定是否属实。根据描述,它们将被视为完全独立的文件,占用2倍的空间。