为什么我的Mercurial HG repo在重命名文件时会大幅增长?

时间:2014-10-28 18:02:27

标签: mercurial

当我检查.hg文件夹的属性时,Windows资源管理器会显示50,1 MB的仓库。然后我重命名了一个包含341个文件和4MB的文件夹,检查了更改,现在回购计数为54,5MB。我使用以下命令重命名:

hg rename -vf oldFolder newFolder

怎么了?我只是在改变引用,而不是在这里克隆文件,不是吗?

编辑:我也很感激有关如何调试此内容的任何提示。

2 个答案:

答案 0 :(得分:1)

根据hg rename命令的文档:

hg rename [OPTION]... SOURCE... DEST

aliases: move, mv

rename files; equivalent of copy + remove

    Mark dest as copies of sources; mark sources for deletion. If dest is a
    directory, copies are put in that directory. If dest is a file, there can
    only be one source.

如文档所述,重命名命令相当于副本,然后是删除,以及文件复制位置的记录。

答案 1 :(得分:1)

Mercurial现在没有有效地存储重命名。

最初存储文件时,它们的全部内容都放在存储库中(显然)。后来的修改只占用差异的空间(应用了一些压缩)。

然而,存储是使用所谓的' revlog'完成的。此revlog存储文件的所有版本。重命名将创建一个新的revlog,这也是一个初始存储'占用整个文件的大小,而不是差异。

这不是一个固有的问题(因此很可能会解决这个问题并最终解决),但要以一种好的方式解决它会非常复杂。有关详细信息,请参阅this bug

Git以不同的方式存储文件,它处理重命名而没有这种开销。这就是为什么你没有看到任何增长。 '缩小'你认为很可能与garbage collection有关。