“没有要合并的内容,与hg merge

问题描述 投票:4回答:1

我正在尝试从其他DVCS转换为Mercurial。我发现Mercurial不允许我做其他DVCS认为完全合理的事情。

似乎在回购中,其中一位用户习惯像这样工作:

  • fork
  • 叉中工作
  • 合并后备箱->叉子
  • 测试
  • 合并叉->行李箱

这似乎完全合理。除非在用户测试时干线没有高级,否则hg拒绝使用

进行最终合并

中止:没有要合并的内容

并且--force无效。

我可以使用以下测试用例来复制它:

echo "Test data" > file
hg add file
hg commit file -m "Ancestor"
# rev 0

echo "Trunk" > file
hg commit file -m "Trunk"
# rev 1

hg checkout 0
echo "Branch" > file
hg commit file -m "Branch"
# rev 2

hg merge --tool internal:local 1
hg commit -m "Merge trunk to branch"
# rev 3

hg checkout 1
hg merge --tool internal:local 3  # <--- fails
hg commit -m "Merge branch to trunk"

[如果我修改测试以使主干在两次合并之间前进,那么在最后的合并主干上现在是新的修订版4,而修订版3已合并到其中,一切正常。

这显然是所有完全标准的工作流程---我自己做。那为什么不起作用呢?

更新:

此测试用例有效:

echo "Test data" > file
hg add file
hg commit file -m "Ancestor"
hg branch trunk
# rev 0

echo "Trunk" > file
hg commit file -m "Trunk"
# rev 1

hg checkout 0
hg branch branch
echo "Branch" > file

hg commit file -m "Branch"
# rev 2

hg merge --tool internal:local 1
hg commit -m "Merge trunk to branch"
# rev 3

hg checkout 1
hg merge --tool internal:local 3
hg commit -m "Merge branch to trunk"

这是完全相同的代码与第一个测试用例相同,不同的是,树干和前叉现在已显式分支,而不仅仅是使用临时头。所有合并和签出均使用与以前相同的修订。显然分支是魔术。

[不幸的是,我不能在真实代码中使用分支,因为其他DVCS 使用临时头,而这些头都没有任何分支信息。我不想为每个叉子都伪造一个分支。

我如何说服Mercurial在不使用显式分支的情况下做到这一点?

version-control mercurial merge
1个回答
0
投票

修订版3是修订版1的直接上级。这里没有要合并的并发更改。您只需要hg update 3

[合并适用于您有两个分支的情况,并且您希望在新的通用版本中收集双方的更改。在这种情况下,您需要在两个不同版本之间进行三向合并(使用来自更大共同祖先的信息)

在这种情况下,有两个不同的版本,没有共同的祖先,只有文件的旧版本和新版本。您只想使用hg updateupdate是移动的官方命令,checkout是它的别名)

我不知道为什么其他DVCS通过调用“合并”不涉及任何合并的内容来使您感到困惑。

((注意:考虑将hg log -G用于图形的图形输出)] >>

((其他注意:从不使用merge --force,这是一个已过时的旧标志,在执行愚蠢的事情。出于充分的原因,它从hg help merge中隐藏了]]

© www.soinside.com 2019 - 2024. All rights reserved.