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

Posted

技术标签:

【中文标题】在 Git 和 Mercurial 中重命名:准确性和自动化【英文标题】:Renaming in Git and Mercurial: Accuracy and automaticity 【发布时间】:2011-08-22 21:34:16 【问题描述】:

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

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

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

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

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

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

我的结论是对还是错?

参考:

Git and Mercurial - Compare and Contrast

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

我不认为 Mercurial 跟踪文件重命名的能力几乎没有您想象的那么完美。我对 Git 没有太多经验,但我对 Mercurial 确实有一点经验,而且在某些情况下重命名文件似乎可以正常工作(hg view 理解它们),只要你没有做过任何“有趣的事情” "(这似乎经常发生)。

而且,至少从声誉上来说,Git 应该允许您在需要时对历史进行低级更改。

【讨论】:

以上是关于在 Git 和 Mercurial 中重命名:准确性和自动化的主要内容,如果未能解决你的问题,请参考以下文章

text 在git中重命名本地和远程分支

在 Git 中重命名文件后没有预期的日志 [重复]

text 在GIT中重命名分支

markdown 在Git中重命名远程分支

处理重命名:svn vs. git vs. mercurial

当远程分支在 Git 中重命名时,如何更新我的本地引用?