Version control 为什么mercurial警告我使用不同的重命名?
我已经使用Mercurial版本控制系统有一段时间了,有几次我看到该系统警告我不同的重命名 我要做的是为一个更大的文件创建两个不同的子体。例如,我有一个名为Version control 为什么mercurial警告我使用不同的重命名?,version-control,mercurial,Version Control,Mercurial,我已经使用Mercurial版本控制系统有一段时间了,有几次我看到该系统警告我不同的重命名 我要做的是为一个更大的文件创建两个不同的子体。例如,我有一个名为HttpRequest的类,它是CGI.pm的包装器。后来,当我决定转到PSGI协议时,我制作了该文件的两个副本,即Cgi.pm和PSGI.pm。原始类保留并变得抽象,新类继承自原始类 我一直认为这是处理此类情况的首选方法,因为每个文件都保留它所基于的文件的历史记录。但当我将更改推送到远程服务器时,它会告诉我: remote: adding
HttpRequest
的类,它是CGI.pm
的包装器。后来,当我决定转到PSGI
协议时,我制作了该文件的两个副本,即Cgi.pm
和PSGI.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
这不好吗?我应该换一种方式吗 问题似乎不是您制作了同一源文件的版本副本,而是有两个变更集,其中文件每次都被重命名为不同的名称,并且这些变更集不在同一开发行中。这一观察是基于这样一个事实,即你的拉力创造了一个新的头部 因此,在本例中,Mercurial警告您,pull创建了一个新的头,因此您的回购协议中有两个头,每个头中的
CGI.pm
已重命名为不同的文件。因此,如果您试图将这些更改合并为一个,您必须决定应该坚持哪一个更改
防止这种情况发生的最简单方法是复制原始文件,而不是重命名它。更准确地说,第一次您可以重命名它,但在以后的所有情况下,您都必须复制它(显然,如果您在同一开发线上执行此操作,并且如果您不打算稍后合并不同的开发线,那么这是必要的)
您可能还想看看Mercurial的最终指南。您提到的
+1 heads
出现在这里,因为我一直在一个功能分支工作,然后将其与默认分支合并。此添加的头只是合并后添加到要素分支的结束变更集。但奇怪的是,我不能用一个干净的存储库复制这个警告,所以你是对的,这不是由同一个文件的两个副本引起的。我一定是做错了什么事,然后忘了。