如何在Mercurial中检查潜在的合并/重定基础冲突?

如何在Mercurial中检查潜在的合并/重定基础冲突?,mercurial,Mercurial,是否有一种简单的方法可以检查合并/重基是否会产生文件冲突,而不实际执行合并/重基 我希望能够决定是否: 如果触摸到的文件集(我的和他们的)不同,请重新设置基址 如果我们在处理相同的文件,请合并 因为错误的合并(由于人为错误以错误的方式解决冲突而导致)如果我合并两个头,而不是重新设置基础,则更容易检测和反转。特别是如果我推动我的改变,然后后来意识到有些事情搞砸了 (不可能总是事先检查所有内容,因为我们没有完全全面的测试套件。) 和。。我正在运行Windows:) 您可以看到两个变更集REV1和

是否有一种简单的方法可以检查合并/重基是否会产生文件冲突,而不实际执行合并/重基

我希望能够决定是否:

  • 如果触摸到的文件集(我的和他们的)不同,请重新设置基址
  • 如果我们在处理相同的文件,请合并
因为错误的合并(由于人为错误以错误的方式解决冲突而导致)如果我合并两个头,而不是重新设置基础,则更容易检测和反转。特别是如果我推动我的改变,然后后来意识到有些事情搞砸了

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


和。。我正在运行Windows:)

您可以看到两个变更集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
如果你真的想得到幻想,你可以调整脚本,根据是否找到任何行自动运行merge或rebase


如果你在windows上,我的上帝保佑你。:)

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

至于测试合并或重基是否会导致冲突,那么您可以使用

$ hg merge --tool internal:merge
在Mercurial 1.7中,以覆盖您的正常设置。(工具内部:合并部分是新的,在早期版本的Mercurial中使用
--config ui.merge=internal:merge

合并后,

$ hg resolve --list
我会告诉你结果,你会回到你开始的地方

$ hg update --clean .

所以,在Martin的回答的帮助下,我提出了Rebeseif扩展,它满足了我的需要

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

有关详细信息,请参阅

更新

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


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

我在windows上有python,因此我可以轻松编写一个脚本来实现这一点。不过作为一个插件还是不错的。:)这似乎不是我想要的。我需要检查一整套修订,以确定两个匿名分支是否包含冲突,一直到它们的共同祖先,而不仅仅是检查两个修订。您可以在Windows上安装Cygwin:-)GIT的阴影,是吗?我选择的原因是,如果我合并两个头部,而不是重新基址,那么错误的合并(由人为错误以错误的方式解决冲突引起)更容易检测和反转。特别是如果我推动我的改变,然后后来意识到有些事情搞砸了。(不可能总是事先检查所有内容,因为我们没有完全全面的测试套件。)。你认为我的用例在这种情况下有意义吗?马库斯:我认为这是一个喜欢合并的有趣而有效的理由。我以前从来没有想过这样的区别。。。。作者不信任的内容。:-)+我感谢麦克这么说-给那些比作者更信任某事物的人。