Git和Mercurial中的重命名:准确性和自动化
我只有几天使用Git和Mercurial的经验,没有太多编程经验 在过去的几天里,我读了很多比较两者的帖子。根据我的阅读和测试,我得出以下结论: Git的重命名是100%自动的,但不是100%准确。它依赖于算法来猜测重命名。即使完全错误,最终用户也无法改变其决定 我想Git的方法可能适合99%的病例,但这1%会引起头痛。这让我在重构代码时犹豫不决(同时更改类名和内容),因为如果重构太多,我就有可能丢失文件历史记录 Mercurial可以100%自动和100%准确,只要我总是在Visual Studio中重命名/移动我的东西并安装了VisualHG,VisualHG就应该准确和自动地跟踪移动和重命名(目前VisualHG有一个bug-)。如果它出错,最终用户可以改变它的决定 如果我没有Visual Studio,我仍然可以使用Ortoisehg的“检测副本/重命名”窗口,我可以设置相似性百分比,让Mercurial自动检测重命名。如果它出错,我有机会改正它 我的结论是对的还是错的 参考:Git和Mercurial中的重命名:准确性和自动化,git,mercurial,rename,tortoisehg,visualhg,Git,Mercurial,Rename,Tortoisehg,Visualhg,我只有几天使用Git和Mercurial的经验,没有太多编程经验 在过去的几天里,我读了很多比较两者的帖子。根据我的阅读和测试,我得出以下结论: Git的重命名是100%自动的,但不是100%准确。它依赖于算法来猜测重命名。即使完全错误,最终用户也无法改变其决定 我想Git的方法可能适合99%的病例,但这1%会引起头痛。这让我在重构代码时犹豫不决(同时更改类名和内容),因为如果重构太多,我就有可能丢失文件历史记录 Mercurial可以100%自动和100%准确,只要我总是在Visual Stu
我认为Mercurial跟踪文件重命名的能力并不像您想象的那样完美。我对Git没有太多的经验,但我对Mercurial有很好的了解,在某些上下文中重命名文件似乎可以正常工作(
hg view
了解它们),只要您没有做任何太“有趣”的事情(这似乎是经常发生的)
至少从声誉上讲,Git应该允许您在需要时对历史进行低级更改。您可以看到差异的解释,但大多数情况下您是对的。Mercurial有rename
和mv
命令进行“真正”的重命名,而Git的mv
只执行rm
和add
。而且Mercurial似乎可以模仿Git的行为并猜测您的重命名,这是一个非常好的特性。根据经验,Git的重命名检测算法经常做出错误的决定——特别是如果您复制一个文件并稍微修改两个副本——大多数情况下都是错误的