網頁

2019/4/13

SVN 多branch開發流程練習

下圖為使用SmartSVN進行SVN多branch的開發流程練習。


revision 1:一開始只有trunk,也就是SVN repository預設的主線。

revision 2,3,4:從trunk加入新的branch分支分別為:DEV,QA,PROD。
DEV為開發人員專用的分支,QA為測試人員專用的分支,PROD為發佈專用的分支。
原則上開發人員只會在DEV分支進行修改及更新,而QA分支的一切都只能從DEV分支合併(merge)過來。同樣地PROD分支的一切只能從QA分支合併過來。

revision 5:一個叫matt的開發人員要開始進行開發了,他應該從DEV切一條自己專屬的分支DEV-matt來開發。

revision 6:matt在DEV-matt分支開發。

revision 7:matt將DEV-matt分支開發的程式合併回DEV。所以matt要先切換到DEV分支,然後將DEV-matt分支合併。

revision 8:另一名開發人原john加入了開發,所以一樣從DEV切一條新的專屬的DEV-john分支。

revision 9,10:john在DEV-john持續開發並提交。

revision 11,12:matt在DEV-matt持續開發並提交

revision 13:john將在DEV-john開發好的程式合併回DEV。所以john要先切換到DEV分支,然後將DEV-john分支合併。

revision 14:john在DEV-john持續開發並提交

revision 15:john將在DEV-john開發好的程式合併回DEV。

revision 16:matt準備要把DEV-matt開發好的程式合併回DEV。但合併回DEV之前,應先在DEV-matt分支將DEV的程式合併,因為DEV的版本(revision 15)比DEV-matt(revision 12)的新,代表DEV的程式有目前DEV-matt所沒有的部分,也就是john在revision 9,10,13,14,15開發並合併至DEV的部分。

revision 17:matt確認目前的DEV-matt版本(revision 16)是新於DEV版本(revision 15)的情況後,代表DEV-matt分支已經有全部的DEV分支的內容,所以切換至DEV分支將DEV-matt分支合併。

revision 19:matt要開發一個工期比較長的功能,所以再從自己的DEV-matt開一支專門開發此功能的分支DEV-matt-f001。

revision 20:matt在DEV-matt-f001提交了一些程式碼。

revision 21:matt要修復一個之前的錯誤,所以再從自己的DEV-matt開一支專門修復此錯誤的分支DEV-matt-b001。

revision 22:matt在DEV-matt-b001提交了修復錯誤的程式碼。

revision 23:matt在DEV-matt-f001提交了一些程式碼。

revision 24:john準備要把DEV-john開發好的程式合併回DEV。合併回DEV之前,因DEV版本新於DEV-john,所以先在DEV-john分支將DEV的程式合併。

revision 25:john在DEV-john提交了一些程式碼。

revision 26:matt切換回DEV-matt將DEV-matt-b001合併。

revision 27:matt切換回DEV-matt-f001,將DEV-matt合併。

revision 28:matt在DEV-matt-f001提交了一些程式碼。

revision 29:john切換回在DEV將DEV-john合併。

revision 30,31:matt將DEV-matt合併回DEV。

revision 32,33:matt將DEV-matt-f001合併回DEV-matt。

revision 34:matt將DEV-matt合併回DEV。

revision 35:QA合併DEV的版本來測試,測試沒問題下一個對外的版本tag。

revision 36:PROD合併tag所在的QA版本,並以此來發佈到正式環境。


關於revision 16,17,revision 24,29,revision 30,31,revision 32,33要注意的是,如果從一個主分支(例如DEV)切出一個新分支(例如DEV-matt)進行開發,在新分支要合併回主分支前,必須先檢查主分支和新分支的版本新舊,因為在多人開發的情況下,主分支會因為其他開發者的更新與合併而持續推進,也就是說主分支中已經有其他開發者提交的程式碼,而新分支原有的程式碼仍停留在剛切分出來時的狀態,此時主分支的版本號就會比新分支新,所以要先將主分支中其他開發者的更新的程式碼合併回新分支中,合併好並確認新分支的版本是新於主分支的情況下,在將新分支合併回主分支。

分支合併時的步驟 Branch merging steps:

  1. Switch to new branch.
  2. Compare the revision of the origin branch and the new branch, if the origin branch revision is after the new branch, merge the origin branch into the new branch.
  3. Switch back to the origin branch, merge the new branch into the origin branch.

開發人員能變動的只有DEV和自己從DEV切出來的分支。

測試人員能變動的只有QA,但僅限於選擇合併哪個DEV版本。

營運人員能變動的只有PROD,但僅限於選擇合併哪個QA版本。


假設今天開發者開發了一支實驗性的功能ex要給QA進行測試,這功能目前並不發佈。QA原則上都從DEV合併,而PROD都從QA合併,如果這實驗性功能合併至DEV,則代表PROD在合併QA時就會合併了此不應發佈的功能,所以實驗性功能不可合併回DEV,那QA該怎麼測試這實驗性的功能呢?

可以先從DEV開另一條分支例如叫DEV-ex,然後開發人員將開發好的實驗功能合併回DEV-ex,然後QA開一條新的QA-ex分並合併DEV-ex。測試人員便可將QA-ex部屬到測試機上進行測試,而不干擾原本的QA版本。


參考:

沒有留言:

張貼留言