2012-04-20 52 views
1

我一直在使用Mercurial版本控制系统已经有几段时间了,我已经看到系统警告过我有关不同的重命名。为什么mercurial会提醒我不同的重命名?

我所做的是让一个大文件的两个不同的后代。例如,我有一个名为HttpRequest的类,它是CGI.pm的包装。后来,当我决定转向PSGI协议时,我已经制作了这个文件的两个副本,即Cgi.pmPsgi.pm。原始类继续存在,并且随着从中继承而来的新类变得抽象。

我一直认为这是处理这种情况的首选方式,因为每个文件都保留了它所基于的文件的历史记录。但是当我将更改推送到远程服务器时,它告诉我:

remote: adding changesets 
remote: adding manifests 
remote: adding file changes 
remote: added 2 changesets with 2 changes to 2 files (+1 heads) 
remote: warning: detected divergent renames of lib/HttpRequest.pm to: 
remote: lib/HttpRequest/Cgi.pm 
remote: lib/HttpRequest/Psgi.pm 

这是坏的吗?我应该以其他方式做吗?

回答

2

看起来问题不在于您制作了相同源文件的版本化副本,而是存在两个更改集,其中文件每次都重命名为不同的名称,而这些更改集不在同一行发展。这一观察结果是基于你的拉力创造了一个新的头。

所以在这种情况下,Mercurial是警告你,拉创造了一个新头,因此您的回购有两个头内每一个CGI.pm已重命名为不同的文件。因此,如果您尝试将它们合并成一个,您必须决定应该保留哪些更改。

防止这种情况最简单的方法是复制原始文件而不是重命名它。更确切地说,你可以重新命名它,但是在所有后续的场合,你必须复制它(显然,如果你在同一行开发中这样做,并且如果你不想但在以后打算合并发散行) 。

你可能也想看看Mercurial的权威指南relevant section

+0

您提到的'+1头部'出现在这里,因为我一直在功能分支中工作,然后将它与'default'分支合并。这个添加的头只是在合并后添加到功能分支的结束变更集。 但奇怪的是,我不能用干净的存储库重现此警告,所以你是对的,这不是由同一个文件的两个副本造成的。我一定犯了错误,然后忘了它。 – 2012-04-20 12:45:58

相关问题