測試多分支開發對合並程式碼的影響

Hawken發表於2019-02-10

在多人開發的專案中,一般會有 master、dev、test 分支,每個分支的作用也是不一樣的。master 是用於線上環境,個別負責人才有合併許可權的;dev 用於開發環境;test 用於測試環境。一般的合併流程是dev→test→master。但是,如果多個人同時在一個分支如 test 分支上寫程式碼,有的程式碼要上線,有的以後才上,這樣就會導致不上線的程式碼也會被合併到 master 上

所以,開發新功能的時候一般會在最新的master 分支切出一個分支來開發。

遇到的問題

最近在一個專案新增功能,於是在 master 切了一個分支進行開發,分支就叫add_feature吧。在把程式碼合併到 master 分支的時候,遇到一個問題,顯示“在這個合併請求的源分支中,當前沒有任何更改”(Currently there are no changes in this merge request's source branch.)我就很奇怪,明明沒有提交合並請求過,master 怎麼會有我的程式碼呢?然後我在 master 分支上git log,發現有我的提交記錄,以為 master 分支上已經有我的程式碼了。於是把合併請求關閉了。

結果 master上線之後,我調了一下我的程式碼涉及到的 api 介面,居然404了。在 add_feature上寫好程式碼後,我會把程式碼合併到 test,然後部署到測試環境進行測試。我猜測有人在 直接在test 分支上開發,需要上線程式碼,發現 test 分支摻雜著我的程式碼,於是把我的程式碼刪除,然後合併到 maseter,結果 master 裡有我的 commit,導致我無法將 add_feature 合併到 master 分支。

重現步驟

為簡化步驟,只建立 master、test、add_feature 分支。

  1. 新建一個倉庫,初始化 master 分支程式碼,程式碼如下:
    測試多分支開發對合並程式碼的影響
  2. 在 master 分支切出新分支 add_feature,然後新增新程式碼——函式 test1(),截圖中有詳細步驟:

測試多分支開發對合並程式碼的影響
3. 然後在 master 分支切出新分支 test,供大家測試使用。再將 add_feature 合併到 test,部署新新增的功能:

測試多分支開發對合並程式碼的影響
4. 某位同事A在 test 分支上新增 test2()功能,提交程式碼:

測試多分支開發對合並程式碼的影響
5. 同事 A 要上線 test2(),但是暫時不上線 test1(),於是他把 test1()程式碼刪除了:

測試多分支開發對合並程式碼的影響
6. 負責人執行合併 test 分支請求,結果如下:

測試多分支開發對合並程式碼的影響
git log 發現也是有 add_feature的提交記錄:

測試多分支開發對合並程式碼的影響
7. 此時也需要將 test1()的功能上線,於是決定將 add_feature合併到 master 分支:

測試多分支開發對合並程式碼的影響
結果有點詫異,程式碼已經是最新的。 使用 git diff add_feature檢視,兩個分支是有差異的:

測試多分支開發對合並程式碼的影響
8. 問題得以重現。

結論

多人合作不要直接在 test 分支上開發,如果已經開發了,也不要把別人的程式碼刪掉,註釋掉就好了。

存疑

本人還是新手,不瞭解這內部的原理是什麼。也有可能我的這些步驟出問題了,如果有不對的地方,希望大佬們能夠指出。謝謝大家。

寫此文僅以記錄開發中遇到的問題。

原文連結

相關文章