1

我已经使用 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

这很糟糕吗?我应该以其他方式吗?

4

1 回答 1

2

看起来问题不在于您制作了同一个源文件的版本副本,而在于有两个变更集,其中文件每次都被重命名为不同的名称,并且这些变更集不在同一开发线中。这个观察是基于你的拉力创造了一个新的头的事实。

因此,在这种情况下,Mercurial 会警告您 pull 已经创建了一个新的 head,因此您的 repo 中有两个 head ,每个headCGI.pm都已重命名为不同的文件。因此,如果您尝试将这些合并为一个,您将不得不决定应该坚持哪个更改。

防止这种情况发生的最简单方法是复制原始文件而不是重命名它。更准确地说,一次您可以重命名它,但在所有后续情况下,您都必须复制它(显然,如果您在同一开发线上这样做,如果您不这样做但打算稍后合并不同的线,则这是必要的)。

您可能还想查看 Mercurial: The Definitive Guide 的相关部分

于 2012-04-20T12:32:44.283 回答