2011-03-02 56 views
0

我有一個小團隊,我想做到以下幾點:水銀隊庫/挑挑揀揀

我有我的箱子,我只是把它TRUNK

現在,TRUNK是一個項目這已經在生產和運行。現在,不可避免的缺陷進入,但進入bugzilla並分配給用戶。

每個用戶克隆TRUNK到他們的本地存儲庫和進行了更改,他們推到一個目錄TRUNK /項目(項目是不是TRUNK的克隆,只是一個普通的目錄)

現在,一天到來的時候,我想創建一個名爲RELEASE的新版本,我想將一些bug修復(不是全部,只是一些)合併到RELEASE中。

請注意,我沒有承諾擁有TRUNK/projects/[錯誤修正列表]的想法,但這就是我現在所擁有的,並且不止是對任何/所有建議都開放。

有什麼想法?有什麼我可以做/應該做不同?再次,我願意接受任何/所有建議,包括完全改變上述程序(除了使用Mercurial作爲公司使我們使用的產品外)

回答

0

有兩種方法可以做到這一點,它們在發佈時並不相同,但是當您根據您提供錯誤修正更改集的父母進行錯誤修復時。 「好」的方式只使用推,拉和合並。不太好的方法(它不是完全不好,但它當然是次優)被稱爲櫻桃採摘它有缺點。棘手的部分是,無論您是否能夠通過合併將錯誤修復移入RELEASE,而無需移動從TRUNK到RELEASE的所有內容都是您在做出更改之前必須做出的決定。

下面是一個類似的問題一個真正完整的答案,解釋這是怎麼回事:Some help with merging legacy branch in Mercurial

的關鍵概念雖然是你可以合併一個修改成你想要但任何分支它這一切帶來的其祖先的變化。所以你想讓你的bug修復爲最小血統。這意味着修復TRUNK中的一個新變更集中的錯誤,這個錯誤恰好是您添加的最新功能,但首先,您的TRUNK和RELEASE中已存在的變更集首先會變爲hg update,那。或者:

  • 其中,發行版和主幹分叉

  • 當錯誤被引入

我的選擇是對後來變更的變更。如果在變更集666中引入了錯誤,則每個具有變更集666的克隆,分支和構建都需要您的修復。因此,固定時,它只是做:

hg update 666 
    .. fix the bug .. 
    hg commit -m "fixed bug 55" # creats changeset 999 which a new head 

然後,你可以這樣做:

hg update TRUNK 
hg merge 999 

,你就會知道你只是在一個單一的變更拉動。後來,當你準備好釋放你可以這樣做:

hg update RELEASE 
hg merge 999 

和你又只得到自己希望的單個變更。

這種工作方式的優勢在於選擇Cherrypicking(使用導出/導入或移植),因爲您的修復只在您的回購中存在一次。如果您有各種挑剔的客戶99個不同的供應商分公司和你想看看他們是否有缺陷55修復,你可以這樣做:

hg log -r 'descendants(999) and heads(FUSSYCUSTOMERBRANCHNAME)' 

,如果沒有結果的話,那客戶沒有999因此在變更集666中沒有針對錯誤55的修復。當您重新執行多個更改(這是導出/導入和移植的結果)的相同工作時,這很難驗證。

0

通常的做法是創建主題分支。

每個新問題/門票/增強都被分配到單獨的分支。

任何時候維護者想要發佈新版本,他可以合併所有(或只有一些)分支到「默認」或甚至是新的分支,例如, 「release_1_x」。

更確切地說,處理代碼的開發人員仍然可以克隆存儲庫,然後創建本地分支,最後在對該分支進行一次或多次提交之後,將本地更改推送到一個集中式克隆(團隊中的每個其他開發人員可以再次進行拉/克隆)。