Version control 使用Mercurial记录两个文件之间的代码转换
我在正在开发的游戏中错误地组织了代码,并打算将状态更新代码从Version control 使用Mercurial记录两个文件之间的代码转换,version-control,mercurial,dvcs,Version Control,Mercurial,Dvcs,我在正在开发的游戏中错误地组织了代码,并打算将状态更新代码从GameView类移动到级别类。我想以某种方式记录这个剪切和粘贴。我使用Mercurial进行版本控制。Mercurial有可能做到这一点吗?是否有其他VCS提供此功能 再多读一点,看看Linus在Google上关于git的演讲,以及回顾答案和评论,我知道这是git的责怪命令的一个特性,它通过启发式工作 我可以通过使用导出Mercurial变更集,然后只使用git-M-C命令来获得此功能。有没有更简单的方法不涉及git 如果不是,我将
GameView
类移动到级别
类。我想以某种方式记录这个剪切和粘贴。我使用Mercurial进行版本控制。Mercurial有可能做到这一点吗?是否有其他VCS提供此功能
再多读一点,看看Linus在Google上关于git的演讲,以及回顾答案和评论,我知道这是git的
责怪
命令的一个特性,它通过启发式工作
我可以通过使用导出Mercurial变更集,然后只使用git-M-C
命令来获得此功能。有没有更简单的方法不涉及git
如果不是,我将接受一个现有的答案,其中提到git并描述如何最好地使用它的功能。如果级别类还不存在,您可以使用: hg copy GameView.ext Level.ext 然后从GameView中删除您移动到关卡的任何内容,并修改关卡以反映正确的名称,并排除留在GameView中的所有内容
如果Level已经存在,我不认为有什么好的方法可以做到这一点,除非您愿意将代码提取到它自己的类中,该类可以作为GameView的副本开始,并被包括在Level中(通过include、composition或extension)。请参见我认为Mercurial不会显式跟踪文件重命名/移动,至少它不是变更集的一部分(尽管它可以根据特定文件的内容猜测其来源)
也就是说,我恐怕不知道有哪家VCS跟踪文件之间的代码移动,只跟踪目标代码的加法和源代码的减法。对于这种情况,我所做的是将更改与我的其他开发隔离开来,然后在一次提交中提交移动,并附上一条注释,“moved function munge()在文件之间
据我所知,没有VCS跟踪数据的移动。重命名可以使用
git
和Clearcase
Mercurial支持文件重命名检测,如下所示:
hg addremove-s100
-s表示“相似性”,100表示100%。它将查找名称已更改但内容保持相同的文件
我经常以85%或90%的相似性使用这个命令。再加上允许干运行的-n
开关(即只做报告),它可能非常强大
我不认为检测实际移动的代码真的是不可能的。这是关于重命名的,而不是让函数在文件之间移动的更困难的情况。另一方面,跟踪重命名实际上只是跟踪内容在树中移动的一种特殊情况。在某些情况下,您可能会对查询函数何时添加或移动到其他文件感兴趣是的,但是跟踪整个文件的移动似乎更容易让人接受性能方面的影响,因为只需要比较文件哈希值。然而git以其出色的性能而闻名!疯狂。:)嘿,我不是想暗示git很慢或类似的东西,@clee-@clee:我想我是站得住脚了。在这篇文章之后,你认为
hg吗注释
是对git gull
的有效替代品(在符合所述功能时)?