下圖為使用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:
- Switch to new branch.
- 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.
- 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版本。
參考:
沒有留言:
張貼留言