使用命名分支機構你所描述是一個不錯的選擇(儘管not the only choice),但我還是建議使用一些單獨的克隆在衆所周知的地點促進這一過程。假裝http://host/hg/
是hgweb(原hgwebdir)爲您的安裝(雖然SSH://偉大工程太,等等),你有這樣的事情:
http://host/hg/vendor
http://host/hg/custom
兩個獨立的倉庫,其中數據從供應商流向定製,但從來沒有其他方向。指定分支default
將是vendor
和custom
中的唯一一個,您將同時擁有default
和stable
。
當你從供應商一個新的代碼降你把它解壓到vendor
回購的工作目錄,然後運行:
hg addremove
hg commit -m 'new drop from vendor, version number x.x.x'
你在vendor
回購歷史將是線性的,並它永遠不會有你寫的東西。
在
custom
的本地克隆
現在回購你會怎麼做:
hg update default # update to the latest head in your default branch
hg pull http://host/hg/vendor # bring in the new changes from vendor as a new head
hg merge tip # merge _your_ most recent default cset with their new drop
然後,你做他們的新代碼滴上默認合併本地機會的工作。當你對合並感到滿意時(測試通過等),你從本地克隆推回到http://host/hg/custom
。
該過程可以根據需要重複進行,將您的歷史記錄與他們的歷史記錄分離開來,並且讓團隊中的每個人都不負責接受來自供應商的新代碼丟失,只關心一個正常的default/stable
安裝回購,http://host/hg/custom
。
發現了一個類似的情況,但對於Subversion的問題。 (http://stackoverflow.com/questions/2447591) – 2010-10-22 15:33:18
有人會建議Mercurial隊列(mq) - 忽略它們。準備補丁時,個人使用這項技術是一項很好的技術,但不適合您的流程的核心。 – 2010-10-22 15:56:51