在Git和Mercurial中重命名:准确性和自动性

时间:2011-05-10 23:48:34

标签: git mercurial rename tortoisehg visualhg

我只有几天的Git和Mercurial经验,而且我没有太多的编程经验。

在过去的几天里,我读了许多比较两者的帖子。根据我的阅读和测试,我得出以下结论:

Git的重命名是100%自动但不是100%准确。它依赖于算法来猜测重命名。即使完全错误,最终用户也无法改变其决定。

我猜Git的方法可能适用于99%的病例,但1%会引起头痛。这让我对重构我的代码(同时更改类名和内容)犹豫不决,因为如果重构太多,我可能会丢失文件历史记录。

Mercurial可以100%自动且100%准确,只要我总是在Visual Studio中重命名/移动我的东西并安装VisualHG,VisualHG应该准确并自动跟踪移动和重命名(目前VisualHG有一个错误 - {{ 3}})。如果最终用户犯错,最终用户可以改变决策。

如果我没有Visual Studio,我仍然可以使用TortoiseHg的“Detect Copies / Renames”窗口,我可以设置相似度百分比,让Mercurial自动检测重命名。如果它出错,我有机会纠正它。

我的结论是对还是错?

参考:

File is not renamed when I move it between projects

2 个答案:

答案 0 :(得分:6)

Here你可以看到解释的差异,但大多数情况下你是对的。 Mercurial有renamemv命令执行“真实”重命名,而Git mv只执行rmadd。也似乎Mercurial可以模仿Git行为并猜测你的重命名,相当不错的功能。根据经验,Git的重命名检测算法会做出错误的决定 - 特别是如果你复制一个文件并稍微更改两个副本 - 大部分时间都是错误的。

答案 1 :(得分:4)

我认为Mercurial跟踪文件重命名的能力几乎不像您认为的那样完美。我没有太多使用Git的经验,但我对Mercurial有很多帮助,重命名文件似乎在某些情况下工作正常(hg view了解它们),只要你没有做任何事情“有趣”(这似乎经常发生)。

Git,至少在声誉方面,如果你需要,可以让你对历史进行低级别的修改。