【问题标题】:Why does mercurial warn me about divergent renames?为什么 mercurial 会警告我有关不同的重命名?
【发布时间】:2012-04-20 12:25:51
【问题描述】:

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

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

【问题讨论】:

    标签: version-control mercurial


    【解决方案1】:

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

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

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

    您可能还想查看 Mercurial: The Definitive Guide 的 relevant section

    【讨论】:

    • 你提到的+1 heads出现在这里是因为我一直在一个特性分支中工作,然后将它与default分支合并。这个添加的头部只是合并后添加到功能分支的关闭变更集。但奇怪的是,我无法用干净的存储库重现这个警告,所以你是对的,这不是由同一个文件的两个副本引起的。我一定是做错了什么然后忘记了。
    猜你喜欢
    • 2021-09-08
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 2022-06-19
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    相关资源
    最近更新 更多