我的倉庫的歷史是這樣的:如何重組一個Mercurial庫有兩個主要的平行分支
A -- B -- C (branch "foo")
\
-- D (branch "bar")
兩個分支都是「送貨」的分支,並有本質的不同前端以一個共同的後端。
以前的所有代碼都在一個分支中,foo
或bar
功能通過編譯器開關打開或關閉,但是我分支以便更容易地單獨使用每個功能。
問題是,常見的「後端」文件本身可能應該是一個單獨的分支 - 我經常想只是工作在這些常見的文件。由於我創建這些分支的方式,歷史有點搞砸了:在分支bar
的過去,它曾經有foo
的功能。
目前,我只是在一個分支上進行更改,然後使用hg transplant
將相同的更改複製到其他分支。
相反,我希望能夠做出改變這樣:
__ C __ D' (branch "foo")
/ /
A -- B -- D (branch "backend")
\ \
-- E -- D'' (branch "bar")
也就是說,工作在分支backend
,然後在每個裝運分支(foo
和bar
),我使用hg merge backend
。
從我目前的情況到我所描述的最好的方式是什麼?我能想到的唯一的辦法是:
卸下所有
foo
和bar
功能,並命名該分支backend
。刪除舊的
foo
和bar
分支。手動添加
foo
功能到backend
並命名該分支foo
,並且同樣爲bar
。
有沒有更好的方法?
另外,這是正確的做法嗎?
不幸的是,這不是乾淨的。兩個分支都有很多變更集。我認爲最主要的問題是'foo'和'bar'最近的共同祖先有*'foo'和'bar'相關的東西。我想要一個新的分支,只是*有後端的東西;但是如果我從新的'backend'分支中刪除所有'foo'和'bar'的東西,那麼我將無法直接合併到任一分支中。 –
@JesseBeder:是的,刪除可能會有問題。您可以從後端刪除所有內容,但後端在'foo',分支'backend'上,然後返回'foo'並退出刪除。這樣,下次將'後端'合併到'foo'中時,刪除就已經存在了。但是,這並不考慮'bar'。 – Helgi
@JesseBeder:還有其他的方法:1)如果後端駐留在一個單獨的目錄下,你可以使用'hg convert'來過濾掉這個目錄的歷史記錄,然後'hg pull --force'到你的原始目錄作爲'後端'分支,或2)如果你不關心歷史,只需將後端的最新狀態複製到新的'後端'分支,並從那裏開發出來。哪種選擇最適合你? – Helgi