“没有要合并的内容,与hg merge
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了“没有要合并的内容,与hg merge相关的知识,希望对你有一定的参考价值。
我正在尝试从其他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在不使用显式分支的情况下做到这一点?
修订版3是修订版1的直接上级。这里没有要合并的并发更改。您只需要hg update 3
。
[合并适用于您有两个分支的情况,并且您希望在新的通用版本中收集双方的更改。在这种情况下,您需要在两个不同版本之间进行三向合并(使用来自更大共同祖先的信息)
在这种情况下,有两个不同的版本,没有共同的祖先,只有文件的旧版本和新版本。您只想使用hg update
(update
是移动的官方命令,checkout
是它的别名)
我不知道为什么其他DVCS通过调用“合并”不涉及任何合并的内容来使您感到困惑。
((注意:考虑将hg log -G
用于图形的图形输出)] >>
((其他注意:从不使用merge --force,这是一个已过时的旧标志,在执行愚蠢的事情。出于充分的原因,它从hg help merge
中隐藏了]]
以上是关于“没有要合并的内容,与hg merge的主要内容,如果未能解决你的问题,请参考以下文章