gpt4 book ai didi

mercurial - Mercurial 嫁接能否处理重命名的文件

转载 作者:行者123 更新时间:2023-12-04 14:03:18 28 4
gpt4 key购买 nike

我想使用hg graft将变更集从一个分支复制到另一个分支。

但是,在变更集中修改的文件已在源分支中重命名(使用hg rename)-在要移植的变更集之前。

当我尝试时,我得到:

scanning for duplicate grafts
grafting revision 3
searching for copies back to rev 2
unmatched files in local:
f1.txt
resolving manifests
overwrite: False, partial: False
ancestor: c06936303423, local: cfeaa3003c57+, remote: e3f2a201d1e2
remote changed f1a.txt which local deleted
use (c)hanged version or leave (d)eleted? c

(c)和(d)都不是正确的选择。

在源分支中,文件f1a.txt已从f1.txt重命名。 f1a.txt甚至从未存在于目标分支中。

这可能吗?

最佳答案

这是一个很好的问题。看来这是不可能的。我重播了您的情况,还尝试了移植和重新设置-效果相同。

我猜这不起作用的基本原因是因为嫁接显式地仅选择一个修订的更改,即不考虑显式的过去更改(包括文件重命名)(更新:也可能是错误或缺少功能,参见@Soulman的答案)。

您没有要求,但是这里有个解决方法。

  • 获取要移植的变更集的补丁:
    $ hg export --git -r <rev-to-graft> > my.patch
  • 在此修补程序中,将f1a.txt替换为f1.txt,这样您将获得:
    ...
    diff --git a/f1.txt b/f1.txt
    --- a/f1.txt
    +++ b/f1.txt
    @@ -1,1 +1,1 @@
    ...

    塞德(Sed)是您的 friend 在这里:sed -i my.patch -e "s,\([ab]\)/f1a\.txt,\1/f1.txt,g"
  • 将编辑的补丁导入到目标修订版:
    $ hg up <target-rev>
    $ hg import my.patch
  • 关于mercurial - Mercurial 嫁接能否处理重命名的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12753660/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com