Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mercurial:TortoiseHg配置,在合并时始终提示手动解析所有文件_Mercurial_Merge_Tortoisehg - Fatal编程技术网

Mercurial:TortoiseHg配置,在合并时始终提示手动解析所有文件

Mercurial:TortoiseHg配置,在合并时始终提示手动解析所有文件,mercurial,merge,tortoisehg,Mercurial,Merge,Tortoisehg,我们使用Mercurial via TortoiseHg和“workbench” 合并分支时,我们通常会发现默认(自动?)更新选择不是我们想要的。我们希望将该工具配置为始终提示任何合并操作 每个分支都有一些核心文件,我们需要在这两个分支之间保持最新,但也有一些分支特定的文件需要保留 如果我们更新一个分支中的核心文件,我们希望合并以获得另一个分支中的最新核心文件。但是,默认的龟甲会自动更新我们不想要的内容 示例: 1) 分支“1”包含一个文件“1.xls”,分支“2”具有一个等效的“2.xls”,

我们使用Mercurial via TortoiseHg和“workbench”

合并分支时,我们通常会发现默认(自动?)更新选择不是我们想要的。我们希望将该工具配置为始终提示任何合并操作

每个分支都有一些核心文件,我们需要在这两个分支之间保持最新,但也有一些分支特定的文件需要保留

如果我们更新一个分支中的核心文件,我们希望合并以获得另一个分支中的最新核心文件。但是,默认的龟甲会自动更新我们不想要的内容

示例:

1) 分支“1”包含一个文件“1.xls”,分支“2”具有一个等效的“2.xls”,该文件存储为二进制文件。将“1”合并到基于“2”的工作目录中会导致删除“2.xls”和添加“1.xls”

2) 分支“1”包含更新的文件“not_core.c”,该文件在分支“2”中具有等效的“not_core.c”。将“1”合并到基于“2”的工作目录中会导致“2”中“not core.c”的不需要的自动更新

3) 分支“1”包含更新的文件“core1.c”和“core2.c”。将“1”合并到基于“2”的工作目录中会导致两个文件的自动更新,此时我们希望有一个提示,允许我们选择是否更新这些核心文件。也许我们现在只需要“core1.c”

我在mercurial.ini中看到了设置“mergetool.premerge=false”的参考,并尝试了一些类似的方法,但没有成功

理想的设置是为每个不同的文件触发图形手动解析

是否有人可以帮助进行支持所述功能的配置


谢谢,Ian

您可以使用
hgrc
merge patterns
merge tools
部分对其进行配置。此设置允许我强制在测试中使用kdiff3:

[merge-patterns]
** = noautomerge

[merge-tools]
noautomerge.executable = kdiff3
noautomerge.args = $base $local $other -o $output --qall
noautomerge.priority = 1
noautomerge.premerge = False
这将关闭Mercurial所做的自动预合并,转而启动kdiff3

它可以用于所有文件,但如果可能的话,您最好将
合并模式
部分修改得更具体一些


另外,请注意合并工具可能会自动解析合并本身,如果发生这种情况,请查找命令行选项以关闭该功能。

所描述的三种情况在您的情况下具有不同的性质,您必须针对不同的情况使用不同的技巧

案例2和案例3(牧场文件中的非冲突更改)可以通过禁用TortoseHG中的自动合并来覆盖(TBT!)(主菜单-
文件-
-
设置-
-
全局设置-
-
TortoiseHG
-“自动解析合并”:False/default-True/)

对于案例1(以及其他非内容更改-重命名、更改属性),情况更糟,并且自动合并无法发挥作用:合并镜像从一个分支到另一个分支的更改历史,即如果在公共父级中只有2.xls被删除|在源分支中重命名为1.xls,此更改将反映在目标中

在这样的合并中,您可以尝试使用不同的“内部”合并工具(当您希望只从一个分支(“虚拟合并”)进行更改时)-内部:本地和内部:其他。但是-它们仅适用于更改的内容(再次!)


也许TipsandTricks部分会有所帮助(您可以在[Alias]中将提到的merge revert resolve加入到新命令中,并在需要时使用它而不是普通的merge)

对于案例2和案例3(非冲突更改),我仍然希望能够选择从另一个分支更新哪些文件。我得到的是自动“更新”。我目前唯一可以使用的工作流(在TortoiseHg workbench中)是在最终提交之前取消合并对话框,然后手动还原不需要的文件。@user2290652-如果禁用自动合并,您将为每对文件运行预配置的合并工具,存在于两个分支中,并且能够从任何源复制到目标块中我的“自动解析合并”设置为false,但阅读此设置的说明解释了为什么它没有帮助:“…如果为false,合并两侧都有更改的所有文件将报告为冲突…”如果只有我要合并的分支上的文件发生了更改,我需要引发冲突,以便我可以选择是否接受它。问题是Mercurial会自动更新其他分支上已更改的所有文件(但不冲突)。我认为这就是“premerge”的意思,但测试它似乎不是这样。我不明白,如果不进行合并,您不希望从另一个分支进行任何更改。我的建议是防止自动合并在两个分支上都已更改的文件(即使这些更改对于合并来说微不足道)。我不确定您是否可以将Mercurial配置为在不需要合并的情况下不在另一个分支上进行文件更改(如果您没有在本地分支上更改文件,则不需要进行合并-这实际上是一个更新)。如果我没有说得足够清楚,那么很抱歉。是的,我希望收到来自其他分支的任何更改的提示,因此我可以选择忽略它们。原因是不同的分支包含具有相同名称但特定于分支的内容的文件。这可能是一个糟糕的决定,但这是历史上发生的事情。我们希望保留一种可以很好地工作的方法,即标记在合并过程中被忽略的文件,这种方法存在吗?(不是通过扩展名,只是通过完整的文件名)。将返回报告…好的,使用合并模式强制“internal:xxx”仍然没有帮助。我认为潜在的问题是,我希望作为合并处理的文件更改在Mercurial中被视为更新,并且将始终应用。我还使用“Git扩展”做了一些初步测试,得到了同样的不想要的行为。因为我更喜欢OrtoisehG工作台UI,所以我没有进一步探索。