Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Version control 为什么mercurial警告我使用不同的重命名?_Version Control_Mercurial - Fatal编程技术网

Version control 为什么mercurial警告我使用不同的重命名?

Version control 为什么mercurial警告我使用不同的重命名?,version-control,mercurial,Version Control,Mercurial,我已经使用Mercurial版本控制系统有一段时间了,有几次我看到该系统警告我不同的重命名 我要做的是为一个更大的文件创建两个不同的子体。例如,我有一个名为HttpRequest的类,它是CGI.pm的包装器。后来,当我决定转到PSGI协议时,我制作了该文件的两个副本,即Cgi.pm和PSGI.pm。原始类保留并变得抽象,新类继承自原始类 我一直认为这是处理此类情况的首选方法,因为每个文件都保留它所基于的文件的历史记录。但当我将更改推送到远程服务器时,它会告诉我: remote: adding

我已经使用Mercurial版本控制系统有一段时间了,有几次我看到该系统警告我不同的重命名

我要做的是为一个更大的文件创建两个不同的子体。例如,我有一个名为
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
出现在这里,因为我一直在一个功能分支工作,然后将其与
默认分支合并。此添加的头只是合并后添加到要素分支的结束变更集。但奇怪的是,我不能用一个干净的存储库复制这个警告,所以你是对的,这不是由同一个文件的两个副本引起的。我一定是做错了什么事,然后忘了。