1. 程式人生 > >設計的一個適合小團隊小專案的git工作流

設計的一個適合小團隊小專案的git工作流

工作流模型

     根據目前開發團隊規模和開發環境,設計了一個git工作流。

    (一)圖示

     

     (二)基本工作流程

  1. 先在CodeClub上新建版本庫,預設生成master分支,master是穩定分支,記錄了每個釋出版本的節點。
  2. 從master分支建立個人分支(用希臘字母命名,比如alpha和beta)。
  3. 開發人員A申請使用alpha分支,然後從CodeClub拉取alpha分支到本地電腦(Dev PC)進行開發,開發完成後推送到CodeClub的alpha分支
  4. 向CodeClub推送程式碼會觸發測試迭代,相關工具自動或手動從CodeClub拉取程式碼到測試環境,自動或手動切換到alpha分支進行測試。測試成功後,自動或手動把alpha分支合併到CodeClub的master分支,並從alpha分支釋出程式碼。
  5. 如果需要熱修復,直接從CodeClub的master分支拉取hotfix分支到本地進行bug修復,修復後直接推送到CodeClub的master分支,並進行程式碼釋出。
  6. 如果需要多人合作,在CodeClub建立share分支,合作的人拉取share分支到本地,開發後都推送到CodeClub的share分支。

     (三)優勢

  1. 從開發到測試到釋出,每個人的程式碼都是解耦的,不會存兩個人因為修改了同一個檔案而必須一起釋出程式碼的問題。
  2. 如果使用增量釋出的方式進行程式碼釋出,建議釋出軟體用git diff命令獲取修改過的檔案列表,自動新增這些檔案,避免手動新增檔案列表。
  3. 每個人使用單獨分支實現解耦的同時,可以用share分支實現了多人合作的程式碼共享。

     (四)注意事項

  1.  測試成功後把當前分支合併到CodeClub的master分支的時候可能存在衝突。
    比如開發人員A使用alpha分支開發過程中,開發人員B通過beta分支釋出並向CodeClub的master合併了程式碼,導致開發人員A使用的alpha分支落後了一個節點,如果修改的程式碼有重合,把alpha合併到CodeClub的master分支就會出現衝突。
    所以要先拉取CodeClub的master分支到alpha分支,解決衝突之後再推送到master分支並進行釋出。
  2. 每次用alpha分支開發新的功能時,應該從CodeClub的master分支而不是alpha分支拉取程式碼,因為alpha分支可能落後於master分支。
  3. 每次轉測前也應該從CodeClub的master分支拉取一次,保證當前的程式碼是最新的,如果有衝突也能早點解決。

一個開發週期的具體演示

     (一)向管理員申請使用alpha分支。

  1. 如果本地沒有版本庫,就用git clone命令複製一個。可以用git branch –a 命令檢視所有的分支,遠端主機被命名為origin。如果本地沒有alpha分支,就用git checkout –b 命令建立一個。
  2. 如果已經有了版本庫和alpha分支,就拉取master分支到本地alpha分支,保證alpha分支不落後。

     (二)進行程式碼開發並提交到本地分支

  1.  編輯檔案

    這裡編輯了README.md和index.html檔案,並新建一個test.txt檔案。用git status檢視當前狀態:

  2. git add 檔案到暫緩區

    可以用git add <file> 命令一個個地新增檔案到暫緩區。

    如果檔案比較多的話,可以用 git add . 命令新增所有檔案到暫緩區。

    如果想忽視其中一兩個檔案,有兩種方法:一是全部add之後再unstage要忽視的檔案;二是把要忽視的檔名寫入.gitignore檔案。

    如果新增的忽視檔案是已經track的檔案(就是以前已經add過的檔案),要用git rm -r --cached <file> 命令清除一下track快取再提交.gitignore檔案,修改才會生效。

    (a)新增全部檔案到暫緩區(stage):

       

    (b)從暫緩區移除 test.txt 檔案:

       

    (c)編輯.gitignore檔案,新增test.txt和README.md檔名後儲存。

       

       全部unstage後檢視狀態,已經沒有test.txt檔案的資訊了,但還有README.md檔案的資訊:

       

       用git rm 命令刪除暫緩區和遠端分支的README.md,git status就沒有README.md的資訊了,不會在追蹤 README.md檔案的變化了。

       

  3. git commit 修改到當前分支。
     

     (三)推送本地分支到遠端對應分支並轉測

  1. 在轉測前要更新當前分支程式碼。

    從遠端的master獲取最新程式碼,如果直接pull不成功,就先fetch遠端master分支,再merge到當前分支:

  2. push當前分支到遠端的對應分支,然後轉測。

    省略git push命令後面的引數也行,因為本地alpha分支已經和遠端alpha分支建立了關聯關係。

      (四)測試成功後推送到遠端master分支併發布程式碼

          測試成功後,再次從遠端的master更新一次,沒問題之後就可以推送到遠端的master分支並進行釋出了。