【问题标题】:How do I check for potential merge/rebase conflicts in Mercurial?如何在 Mercurial 中检查潜在的合并/变基冲突?
【发布时间】:2011-05-04 10:58:20
【问题描述】:

有没有一种简单的方法来检查合并/变基是否会产生文件冲突,而无需实际执行合并/变基?

我希望能够决定是否:

  • 如果触摸的文件集(我的和他们的)不同,则重新设置基准
  • 如果我们一直在处理相同的文件,请合并。

由于错误的合并(由人为错误以错误的方式解决冲突引起)更容易检测和逆转,如果我合并两个头,而不是进行变基。特别是如果我推动我的更改,然后才意识到有些事情搞砸了。

(不可能总是事先检查所有内容,因为我们没有一个完全全面的测试套件。)。

而且.. 我正在运行 Windows。 :)

【问题讨论】:

    标签: mercurial


    【解决方案1】:

    因此,在 Martin 的回答的帮助下,我提出了 rebaseif 扩展,它可以满足我的需求。

    本质上,它会尝试使用内部合并工具进行变基,如果失败(它会针对任何冲突执行此操作),它会中止并与用户的首选工具进行合并。

    详情请见https://bitbucket.org/marcusl/ml-hgext/src/tip/rebaseif.py

    更新

    最近几个月,我回去只是进行合并,因为它本质上是安全的。由于依赖文件可能会影响更改,因此非冲突 rebase 可能仍会搞砸。 (即,rebase 会丢失代码在合并之前的外观信息)。

    作为 rebaseif 的作者,我建议改用普通的旧合并。 :)

    【讨论】:

    • ...作者不信任。 :-) +1 给 Macke 这么说。 -1 对于比作者更信任某事的人。
    【解决方案2】:

    如果更改重叠,则没有理由使用hg merge,否则使用hg rebase,因为hg rebase 在内部进行合并,并允许您使用与hg merge 相同的工具解决它。

    至于测试merge或者rebase是否会导致冲突,那么你可以使用

    $ hg merge --tool internal:merge
    

    在 Mercurial 1.7 中覆盖您的正常 merge tool configuration。 (--tool internal:merge 部分是新的,在早期版本的 Mercurial 中使用 --config ui.merge=internal:merge。)

    合并后,

    $ hg resolve --list
    

    会告诉你结果,你会回到你开始的地方

    $ hg update --clean .
    

    【讨论】:

    • 我选择的理由是,如果我合并两个头而不是进行变基,那么错误的合并(由人为错误以错误的方式解决冲突引起)更容易检测和逆转。特别是如果我推动我的更改,然后才意识到有些事情搞砸了。 (不可能总是事先检查所有内容,因为我们没有一个完全全面的测试套件。)。你认为我的用例在这种情况下有意义吗?
    • Marcus:我认为这是一个喜欢合并的有趣且有效的理由。我以前从来没有想过这样的区别。
    【解决方案3】:

    您可以查看两个变更集 REV1 和 REV2 是否影响任何相同的文件,执行以下操作:

    (hg status --change REV1 --no-status ; hg status --change REV2 --no-status) | sort | uniq --repeated
    

    如果有任何输出,则在两个修订版中都会触及同一个文件。

    这可以很容易地做成一个 shell 脚本,比如:

    #!/bin/sh
    (hg status --change $1 --no-status ; hg status --change $2 --no-status) | sort | uniq --repeated
    

    可以作为以下任何一种运行:

    ./find_overlaps c8f7e56536ab d9e2268e20b9
    ./find_overlaps 1 33
    

    如果您真的想变得花哨,您可以调整脚本以根据是否找到任何行来自动运行合并或变基。

    如果您在 Windows 上,我的上帝会帮助您。 :)

    【讨论】:

    • 我在 windows 上有 python,所以我可以很容易地编写一个脚本来做到这一点。不过作为插件会很好。 :)
    • 这似乎不是我想要的。我需要检查一整套修订,以确定两个匿名分支是否包含冲突,一直到它们的共同祖先,而不仅仅是检查两个修订。
    • 您可以在 Windows 上安装 Cygwin。 :-) GIT 的阴影,嗯?
    猜你喜欢
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    相关资源
    最近更新 更多