如何让mercurial发出冲突文件的基本修订以及修改后的版本?

时间:2010-09-24 07:28:29

标签: mercurial

我正在尝试使用mercurial合并两个分支,并且存在一些冲突。在Subversion中工作时,合并冲突会导致冲突的文件被统一的差异替换,我自己的文件版本添加了“.mine”扩展名,以及文件的最后一个签入版本的“.rxxx” “延期补充。

使用mercurial,我只会添加统一差异以及添加了“.orig”扩展名的我自己的版本。

我习惯于在eclipse中使用“Compare With> Each Other”命令或使用FileMerge自行编辑合并,但由于基本版本不可用而无需手动进行并取出它我可以'不再这样做了。

我不想在hg merge命令期间执行合并 - 我更喜欢在我自己的时间内完成。

我可以使用设置或扩展程序来实现此目的吗?

4 个答案:

答案 0 :(得分:8)

我们有一个名为internal:dump的内置合并工具。所以用

[ui]
merge = internal:dump

你将被带回到古老的Subversion天,或接近它的东西。

答案 1 :(得分:3)

如何设置合并工具,只保存mercurial正在为合并工具进行操作而创建的文件?

[ui]
merge = copy

[merge-tools]
copy.executable = /path/to/mycopy.sh
copy.args = $base $local $other $output

然后在mycopy.sh中执行以下操作:

#!/bin/sh
cp $1 $4.base
cp $2 $4.mine
cp $3 $4.theirs

这应始终立即成功,并为每个冲突的文件留下.base.mine.theirs。您可以在~/.hgrc中设置一次,然后完成。

答案 2 :(得分:1)

查看hg resolve命令。合并开始后,但在提交之前,您可以使用resolve列出存在冲突的文件,并将冲突标记为已解决或未解决,或重新启动合并过程,所有这些都是在单个文件的粒度上进行的而不是变更。

它不会提供您想要的文件(虽然请参阅@ Ry4an的答案),但只要您愿意解决它,它就可以为任何特定文件启动合并工具。

答案 3 :(得分:0)

您可以设置HGMERGE环境变量。

Mercurial通常会首先尝试使用简单的合并算法合并文件,以查看它们是否可以合并而不会发生冲突。只有当存在冲突的更改时,hg才会实际执行合并程序。

您可以将其设置为某些GUI合并工具等。

还有其他选项,如内部:失败,内部:本地或内部:其他

在hgrc:

[ui]
merge = your-merge-program

[merge-tools]
kdiff3.args = $base $local $other -o $output

因此,您应该能够根据您的所有需求指定合并程序的参数。也许,您可以采用这种技术来启动Eclipse。

要在冲突时立即使合并失败,请尝试

export HGMERGE=false

事实上,如果您想提前知道冲突,可以使用hg merge的“预览”选项

-P --preview  review revisions to merge (no merge is performed)