为什么'hg mv'(mercurial)默认情况下不会移动文件的历史记录?

时间:2011-03-10 19:07:18

标签: version-control mercurial

我知道how to do it,我无法理解为什么hg mv默认情况下也不会移动文件的历史记录。

我有责任在hg log --follow之前运行hg mv,这似乎很愚蠢。当你需要使用两个不同的操作删除和添加文件并以相同的方式丢失历史记录时,这会记住我使用cvs的时间。

恕我直言,如果我只是使用内置mv可以丢失历史记录,但我正在使用hg mv,并且考虑到存储库本身,丢失历史记录是没有意义的{ {1}}。应该有by default而不是相反。

这不直观。这里有人对这种行为有一个明智的解释吗?这是设计上的错误,还是有一个很好的理由呢?默认情况下,使用hg mv --no-follow

时,是否可以执行此操作--follow

3 个答案:

答案 0 :(得分:34)

您可以在〜/ .hgrc(或某处/ Mercurial.ini)中更改log:的默认行为,添加

[alias] 
log = log -f 

我已经阅读了日志的外观是出于速度原因。在Mercurial中,Move并不是真正的“第一级”操作。这是一个副本+删除(这与Bazaar相比,其中移动/重命名是“第一级”操作但没有历史保存的副本)。

答案 1 :(得分:33)

你不知道怎么做。 hg log --follow会影响日志的显示方式,而不会影响实际移动的方式。默认情况下,显示文件名的历史记录。 --follow跟随重命名和复制。这符合Mercurial内部实施的方式。

没有任何理由在hg log --follow之前运行hg mv

答案 2 :(得分:2)

@xantos的答案现在已经过时了。更新 hgrc 文件的正确方法是:

[alias]
log = log -f