2013-10-16 25 views
0

(這是關於如何在CVS管理標準開發客戶特定的發展後續問題我earlier question限制推送的內容,以避免意外推到開發分支

我們在mercurial中使用不同的分支來區分標準開發(開發我們的標準軟件)和客戶特定開發(開發客戶特定修改我們的標準軟件)。

所以,讓我們說,我們有如下分支:

  • 默認(標準開發分支)
  • revision1.0(標準開發分支的bugfixing)
  • revision1.1(bugfixing的標準開發分支)
  • customerA

當客戶A希望從1.0升級到1.1,我們只是revision1.1customerA(從 「revision1.0」 有一些變化的克隆)(和解決合併衝突)。到現在爲止還挺好。

我想避免的是開發人員意外地將某些客戶特定的代碼合併到標準開發分支中。我們可以通過Java命名空間來識別「客戶特定的代碼」。

有沒有辦法做到這一點?

編輯:改變「推」到「合併」,因爲這是正確的說法

+0

如果你從修訂版1.1拉到customerA,我猜你正在爲每個「分支」使用單獨的克隆,而不是分支的mercurial定義? – Kindread

+1

更可能是我的意思是「合併」而不是拉,但我同意,目前所寫的問題包含矛盾。 –

+0

正確的術語似乎是_merge_,我編輯了這個問題。 –

回答

1

您可以阻止開發商推壞提交或合併到你的「中央」資料庫,但你不能從本地做他們阻止他們。因此,您可以使用例如pretxnchangegroup鉤子來確保推送不會導致revision1.0分支(或克隆)中的客戶特定代碼,但這隻會拒絕開發人員的推送。他或她在本地仍然會有不良承諾,並需要解決它。

上述評論中存在一些混淆,因爲您正在混淆術語。一個合併(指定)分支之間的東西和之間的東西推之間的東西。

+0

然後用戶應該能夠做一個本地回滾,並能夠解決問題。 – Mark

+0

還沒有嘗試過這個我自己,但不能他也做一個precommit鉤在合併時以類似的方式捕捉它?每個開發者唯一的問題就是設置鉤子。 – Kindread

+0

感謝(對大家)指出合併和推送之間的區別,也是爲了解決本地/中央存儲庫的問題。我會仔細看看mercurial的鉤子。 –

0

這不是問題的答案,但如果你使用分支而不是克隆,那麼,在我的愚見中,這個問題不值得擔心。

只要開發人員使用分支名稱而不是修訂號合併分支,並且客戶分支的分支名稱與其他分支相當不同,那麼對於意外執行'hg merge customerA'的人來說很難。我們(12個開發團隊)有一個類似的分支策略運行了幾年,還沒有人意外地合併了錯誤的分支。

在極少發生的情況下,它通常可以在一小時內解決,或者在反向提交時解決。而且,由於看起來您不會將customerA合併回任何內容,您甚至可以在該分支上執行反向提交操作以將更改返回。

0

您可能會通過不允許推動防止意外推動。 假設,有一些明智的管理員(可能是「團隊」)存儲庫,您可能依賴使用專有的請求。這可以防止任何推動,只有主回購的管理員有權將東西拉入主回購。或者 - 如果事情看起來沒有可接受的形狀 - 拒絕。

彼得Hintjens建議使用專用存儲庫(每個目的一個回購,所以一個回購可能發揮分支的作用)。他的這個組織的原因之一就是爲了防止由於進入回購而產生的意外混亂。請參閱http://hintjens.com/blog:24中的「衝突穩健性」和「隔離保證」。

請注意,這看起來適合於使用git和Mercurial,因爲Mercurial會將分支名稱保存爲提交,所以您不能隨意使用它們。