我試圖從一個不同的DVCS轉換爲Mercurial。我發現Mercurial不會讓我做其他DVCS發現完全合理的事情。「沒有合併」與汞合併
看來,在回購,其中一個用戶是這樣工作的習慣:
- 叉
- 做工作叉
- 合併幹線 - >叉
- 測試
- 合併叉 - >幹線
這一切似乎完全reasonab樂。除非在用戶測試期間,如果主幹尚未提前,則hg拒絕執行最終合併,並以'abort:無法合併'進行最終合併。 --force
沒有幫助。如果我修改了測試,使軀幹兩個合併之間的進步,所以在最終合併主幹現在是一個新的修訂4修訂3
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"
:
我可以用下面的測試案例複製此被合併到它,一切工作正常。
這顯然是完全標準的工作流程---我自己做這個。那麼,爲什麼這不起作用呢?
更新:
這個測試用例工作:
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 是使用ad-hoc頭,其中沒有任何分支信息。我不想爲每個叉子假分支。
我該如何說服Mercurial讓我在不使用顯式分支的情況下執行此操作?
恐怕我不同意---我認爲它*是*合併,我可以證明它:看到更新。通過將每個分支放入明確的分支,Mercurial非常樂意進行合併,即使DAG的形狀與之前的形狀完全相同。不幸的是,由於上面解釋的原因,我不能使用顯式分支... ... –
如果添加分支信息有多個行爲改變(包括上面引用的更新行爲)。在這種情況下,合併會創建一個新的提交,其中包含新的分支信息。在你最初描述的情況下,一個新的提交沒有意義(沒有文件更改,沒有元數據更改等) 你究竟想在這裏做什麼? – Marmoute