代码之家  ›  专栏  ›  技术社区  ›  Macke

如何在Mercurial中检查潜在的合并/重新平衡冲突?

  •  12
  • Macke  · 技术社区  · 15 年前

    是否有一种简单的方法来检查合并/重新平衡是否会产生文件冲突,而不实际执行合并/重新平衡?

    我希望能够决定是否:

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

    因为一个错误的合并(由解决冲突引起的,是人为错误造成的)如果我合并两个头部,而不是重新平衡,那么更容易检测和反转。尤其是如果我推动我的改变,后来才意识到有些事情是一团糟的。

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

    并且…我在运行Windows。:)

    3 回复  |  直到 15 年前
        1
  •  11
  •   Macke    14 年前

    所以,在马丁回答的帮助下,我提出了Rebaseif扩展,它可以满足我的需要。

    本质上,它尝试使用内部合并工具重新设置基片,如果失败(对于任何冲突它都会这样做),它将中止并与用户首选的工具进行合并。

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

    更新

    最近几个月,我又回去做了一次合并,因为它本质上是安全的。非冲突的REBASE可能仍然会把事情搞得一团糟,因为依赖文件会影响更改。(即,REBASE会丢失代码在合并前的外观信息)。

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

        2
  •  4
  •   Martin Geisler    15 年前

    没有理由使用 hg merge 如果变化重叠, hg rebase 否则自 汞基重碱 在内部进行合并,并使用与 HG合并 .

    至于测试合并或重新平衡是否会导致冲突,则可以使用

    $ hg merge --tool internal:merge
    

    在Mercurial 1.7中超越您的正常 merge tool configuration . (The --tool internal:merge 零件是新的,使用 --config ui.merge=internal:merge 在早期版本的Mercurial中。)

    合并之后,

    $ hg resolve --list
    

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

    $ hg update --clean .
    
        3
  •  3
  •   Ry4an Brase    15 年前

    您可以看到两个变更集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
    

    如果您真的想得到幻想,您可以调整脚本,根据是否找到任何行自动运行合并或重新平衡。

    如果你在窗户上,我的上帝会帮助你。:)

    推荐文章