2012-07-28 55 views
6

我正在嘗試確定Gerrit上的多個分支機構的適當工作方式,以符合我們的工作流程。Gerrit:與多個分支合作並傳播更改

我們現在與分支機構合作的方式是:我們有主人&功能分支。碩士是我們想要打磨的分支,並準備發佈,而功能顯然是一個密集的工作領域。現在,在我們的特定情況下,每當有人工作在一個bug修正,它們:

  • 創建針對主分支的變化
  • 櫻桃它挑到特性分支目標改變
  • 一次格里特代碼審查完成後,提交兩個更改。

現在我明白櫻桃選擇的方式,它選擇單個提交併將其合併到當前更改中。如果是這樣的話,我希望最終沒有合併衝突,事實上,這個工作流程完全適用於GIT。然而,Gerrit最有可能歸因於其本質(分支機構不是以遠程方式合併,而是獲得不同的sha標籤),最終列出了大量衝突文件。

現在,我解決了所有這些問題,通過應用合併策略(我們的功能,他們對主),但它不覺得正確:如果沒有傳播任何東西,它只是被丟棄。

我的問題是:是否有安全工作流程,類似於上述那樣,最終會產生與gerrit的乾淨合併?

回答

7

我會說,在這種情況下,合併比櫻桃採摘更好。

櫻桃鎬增加相同的變化但不一樣承諾。所以雖然來源是相同的櫻桃挑選和合並git樹是不同的。當樹不同,你後來做一個合併git會認爲你以前櫻桃挑選的提交丟失,並嘗試合併該更改,即使實際的代碼已經存在。這可能是你爲什麼會遇到很多衝突的原因。

我會提出另一種工作方式。

  • 當你做正常的工作,你就功能開發和推向格里特正常。
  • 當您在穩定的生產環境做一個補丁(即錯誤修復),你這樣做,直接在(或當地的分支機構,如果你喜歡,但不是功能
  • 當補丁在被批准Gerrit將其合併到真正的主文件中,並且您可以製作請求將該更改提供給您的本地副本。你的版本現在一樣Gerrits
  • 現在你會合並在所有新的修改功能。請確保你做一個變基使補丁最終你已經在功能
  • 一旦它的時間來部署所有的新功能做任何事情之前,你可以合併功能,推到格里特(如果您有權限,您可以通過傳球直接/推到,而不是裁判對/主格里特因爲這些變化已經審查)
  • 一旦所有的變化都在Gerrits 您在做一個拉主人和mer ge into feature with rebase making feature clean clean branch to work on。每個版本都有一個新的功能當然是完全有效的。兩者都很好。
0

我有點困惑,因爲這個流程應該工作得很好。如果其他用戶在您的錯誤修復被審查/驗證/提交之前提交了更改,則可能導致合併衝突,但這應該很少見。

如果您:

  1. 修復
  2. 上主的錯誤推到審查(創造格里特改變A)的特性分支的頂部
  3. 摘櫻桃的變化A(解決任何衝突主人爲特色)
  4. 推櫻桃採摘變化審查(創建改變B)
  5. 評論/驗證/提交變化的&乙

一切都會正常工作。合併衝突發生的唯一方法是其他用戶上傳並在步驟1和5之間提交更改。您是否看到不同的行爲?你能提供更多細節嗎?

+0

不,事實並非如此。然而,你說什麼和我們做什麼之間是有區別的。不同之處在於:我們通常會在推動審查之前挑選變化(所以在本地)。也許這就是問題..? 事情是,有些人甚至在創建櫻桃挑選(大提交)之前獲得批准,並且它仍然顯示爲衝突。我相信可能會發現我們需要挑選提交的更改,而不是本地分支機構。 – 2012-08-02 11:43:34

+0

在推動審覈之前或之後選擇櫻桃選擇應該沒有關係。我不確定在創建櫻桃選擇前獲得批准是什麼意思。 – Brad 2012-08-03 13:26:51

+0

當您將更改推送到gerrit時,這些更改不會立即合併。相反,他們是特定分支的候選人,當您「提交」您的補丁集時,將這些分支合併到這些分支中。這意味着合併不會在您的本地存儲庫中完成,並且它似乎也獲得了單獨的SHA總和(我不太深入研究gerrit細節,因此我不知道它爲什麼會發生)。我認爲我們的選秀權和這些偏僻的基金之間沒有任何關聯,基金會不瞭解發生了什麼(它看到兩個分支都發生相同的變化,並將它們視爲衝突) – 2012-08-09 11:22:08