2016-07-28 71 views
0

我們有很多開發人員在Git的項目中工作。現在我們在不同的分支上開發,並在這些分支上進行測試。 問題是,當我們整合這些分支回到掌握一些新的問題蠕變的原因是:如何管理版本以儘量減少集成問題?

  1. 合併和解決衝突的問題。
  2. 這聽起來很遙遠,但經常發生一個分支中發現的錯誤可能已被另一分支中完成的測試覆蓋範圍所捕獲。所以它可以避免。
  3. 在我們的設置中,主分支始終可供用戶進行beta測試。由於我們在發佈週期的相當晚的時候將其重新集成到主機中,因此我們沒有獲得足夠的beta測試覆蓋率

最近我們曾嘗試:

一旦一個新的分支在主合併我們把它合併到各個分支試圖保持分支機構密切掌握越好。這最大限度地減少,但並沒有解決,因爲這兩個原因的問題 -

  1. 它可能已經導致了問題的一個分支實際上是合併的最後一天發佈或更新的週期。

  2. 自從它在合併週期很晚以來,越野車的分支也沒有得到任何測試覆蓋率(主是beta測試分支)。

我們遵循什麼最佳實踐來最大限度地減少此問題?我有這個解決方案 -

  1. 我們在發佈週期的開始創建下一個「發佈」分支。因此,我們週一在星期五是發佈日期時創建發佈分支。
  2. 我們完成了單個分支機構的測試,併合並所有要在此「發佈」分支中發佈的更改。
  3. 我們給這個「發佈」分支進行beta測試,並繼續在這個分支上進行集成測試。
  4. 如果一切都很好,我們從這個分支合併回主人。所以我們維護一個發佈分支和主。

這會將發佈時間延遲我們決定進行集成測試的天數,但似乎更有紀律。 由於這個問題並不新鮮,請給出您的建議或者指出我對這方面最佳做法的正確看法。

回答

1

1)合併衝突

如果可能的話,在不同的文件的工作。如果不是,你可能需要處理衝突。有些技巧可以解決某些開發人員不知道的問題。例如,假設你在文件A上發生合併衝突。假設你想要你的文件A的版本,而不是主控的(這很常見)。然後,你可以說git checkout HEAD -- /path/to/fileA。然後添加/提交。這將使git按原樣使用您更改的文件,而不是master。相反,如果你想要主版本,你可以做git checkout master -- /path/to/fileA,假設你的本地主版本是最新的。或者你可以用這種方法從任何分支中挑選出任何文件:它非常普遍,有時非常方便。

2)在「合併錯誤」而言,這裏是我們如何處理它

我們使用詹金斯/到位桶爲我們的持續集成工具,他們似乎很好地協同工作。我們有一個類似於您的開發模式,我們直接從大師那裏分支出來,然後合併功能。但是,我們沒有合併這些「錯誤」,因爲我們強制Jenkins「僞造合併到主」,並且然後在允許將拉取請求合併到主機之前,對「假合併爲主」運行所有單元測試。這確實會降低集成bug。如果你沒有工具來做到這一點,那麼在合併之前你必須非常努力地合併master並運行你所有的測試。這是一個令人頭痛的問題:我建議讓Jenkins或其他一些自動化的CI工具爲你完成這項工作。

3)發佈分支

這可以是一個很好的做法。但是,我們不實施它們。你可能會發現,通過實施這些,你很快就變成了「git祕書」。我們從來沒有真正嘗試過它們,所以我很難說它們是否是一個好主意,但這是我從聽過他們的人那裏聽到的對他們的論證(傳言,我知道)。

HTH。祝你好運,你的發佈(s)。

+0

感謝。對於第3點),我也反對用太多的發佈分支淹沒系統的想法。我認爲我們應該只維護一個發佈分支和一個主控(在問題中編輯)以最小化開銷。無論如何,目前有人需要將事情歸還給主,所以另一個發佈分支可能聽起來不太過分。 – user2645830

+0

同樣在GIT中,合併衝突在提出拉取請求時解析,而在實際合併時不合並,所以它沒有太多開銷。 – user2645830

2

這是我怎麼會去這樣做:

  1. 創建項目分支。 就項目而言,這是現在的主人。
  2. 每個開發人員都從Project分支創建他們自己的分支來進行工作。
  3. 在任何合併回到項目之前,測試開發者分支中完成的所有工作。合併到項目分支分兩步:

    步驟1 REBASE開發者分支。這是將Project分支合併到開發者分支。解決任何問題,並進行測試,以確保無故障已經在悄悄

    注:這裏的額外的測試有助於找出新問題(通過合併引入)引起的通過整合來自其他開發人員的工作到目前的開發分支。

    第2步如果一切正常,則將開發人員分支合併回工程分支。

    注意:因爲項目分支和開發者分支是相同的,所以這裏不需要測試。

  4. 一旦所有的開發者已經完成了他們在這個發佈週期的工作,並且已經成功地重新組合併合併到了項目分支中,測試項目分支以確保一切正常(迴歸測試)。
  5. 爲此發佈週期提供產品。交付是通過REBASING項目分支完成的,即將主人合併到項目中,修復任何問題,再次測試(再次!)。

我知道這聽起來像很多額外的工作,它也看起來像一個人必須管理存儲庫,但如果你保持在它,它變成例行公事,管理活動脫落。測試活動也變得更加常規,因爲每個開發人員都會學習每個步驟所需的測試類型和計劃。

祝您的項目順利! J.伊薩

2

你可以嘗試一種完全不同的方法 - 採用更Continuous Delivery做法意味着,每個人都工作在主/主幹,和您所使用Feature Toggles隱藏正在進行來自最終用戶的工作。

這樣,你只需要每天小合併,而不是大的(提高1點),你也更多或更少的解決點2和3

+0

謝謝。這很有用,實際上我們仍然使用它來實現更大的功能。但是它也需要與集成測試相結合。 – user2645830