2011-02-11 55 views
2

我在正在开发的游戏中错误地组织代码,并打算将状态更新代码从GameView类移动到Level类。我想以某种方式记录这个剪切和粘贴。我使用Mercurial进行版本控制。 Mercurial有可能吗?其他VCS是否提供此功能?使用Mercurial记录两个文件之间的代码转换


读多一点,看Linus的谈论在谷歌的Git,以及检讨答案和意见,我明白,这是Git的blame命令的功能,并通过做工作的启发。

我可以通过使用hg-git获得此功能,导出Mercurial变更集,然后使用git blame -M -C命令。有没有更简单的方法,不涉及混帐?

如果不是,我会接受一个现有的答案,提到git并描述其最佳功能。

回答

2

git自动执行此操作。请参阅How does Git track history during a refactoring?

+1

这是关于重命名,而不是在文件之间移动功能更困难的情况。 – 2011-02-11 17:34:38

+1

“第二个说明,跟踪重命名实际上只是一个跟踪内容在树中移动方式的特殊情况。在某些情况下,您可能有兴趣查询何时添加或移动到不同文件的功能。“ – clee 2011-02-11 17:45:07

1

如果液位类不存在,你可以做到这一点:

汞柱复制GameView.ext Level.ext

,然后从GameView删除无论你移动到水平,并修改级别以反映正确的名称并排除停留在GameView中的所有内容。

如果等级已经存在,我不认为有,除非你愿意出提取代码到自己的类,可以开始作为GameView的副本,包括做(通过#包括什么好办法,或组成,或扩展)的级别。

1

我不认为Mercurial会明确跟踪文件重命名/移动,至少它不是修改集的一部分(尽管它可以根据它的内容猜测某个特定文件的来源)。这就是说,我担心我不知道任何跟踪文件之间代码移动的VCS,只需添加到目标文件和从源文件中减去即可。

0

我为这种情况做的是从我的其他发展隔离的变化,然后提交在一个单一的运动有一张纸条承诺,“移动文件之间的功能Munge时间()。

据我所知,没有VCS跟踪数据的运动是,重命名与可跟踪和gitClearcase

1

水银支持文件重命名检测如下:。

hg addremove -s 100

-s表示“相似性”,100表示​​100%。它将查找名称已更改但文件内容保持不变的文件。

我经常用85或90%的相似度数字来使用这个命令。并结合-n开关,它允许干运行(即不做报告),它可以非常强大。

实际移动代码的检测不是真的可能我不这么认为。

相关问题