參考
- open.leancloud.cn/git-branch-…
- blog.coding.net/blog/featur…
- blog.coding.net/blog/git-wo…
- blog.coding.net/blog/princi…
介紹
本約束規則適用於所有後端和前端工程程式碼。管理工具使用Coding.net提供的git託管服務。
Git的workflow有多種,各有利弊,無所謂好壞。但團隊協作需要有一致的規範,所以請大家務必遵守。
除了一致性之外,這個規範的目的是以下幾點:
- 方便開發和測試同學協同,高效完成研發工作,產出高質量的成果。
- 確保可以輕易確定特定時間釋出或執行的版本。在新發布的程式存在重大缺陷時,可以儘快 rollback 到上一個穩定版本。
- 在需要修復緊急 bug 並儘快釋出時,可以只發布必要的 bugfix 而不同時釋出還不應釋出的其他改動。
branch和tag
使用Feature Branch Workflow,按照需求新建feature branch
Branch: feature branch、master 和 release。master是預設分支,release 是用於釋出的分支。
- feature branch: 功能開發或bug修復從master新建一個分支,push到遠端倉庫,提交合並至master的請求,合併後刪除該分支;需要多人協作的功能開發,負責人新建分支,共同在該分支上開發,可以測試時提交合並至master的請求,功能上線後刪除該分支。
- master: 只負責合併各feature branch的程式碼,且保證master分支隨時處於可測試,測試之後可釋出狀態。 提交後自動部署到測試環境。
- release: 是當前釋出的分支,在這個分支只能從master新建 或 增加從 master cherrypick 過來的 commit。
Tag: 對應每個釋出版本的 tag。
- SDK 和App應用程式的 tag 遵照
<major>.<minor>.<patch>
的命名,如 2.5.1,參考SemVer; - 服務端程式的 tag 以釋出的日期命名,如 2016.07.28,如果有 bugfix,則在後面增加小寫字母,如 2016.07.28 後是 2016.07.28a,然後是 2016.07.28b。 branch&tag
程式碼提交應儘量採用原子性的提交,即基於單一功能的提交(worktile單一任務或其拆分出的功能),不建議一次性提交多個功能,必須保證每次提交都是可執行的完整功能。提交時必須寫清晰的提交日誌。
開發測試流程
- 開發測試流程 開發/測試/部署流程
- 搭建統一的本地開發測試環境,推薦Vagrant:
釋出管理
所有版本釋出前,測試工程師必須確認測試已完全覆蓋並通過。
- 釋出新版流程:刪除舊的 release branch,並從當前的 master 建立新的 release branch;
- Bugfix 流程: bugfix 指的是修復已經發布的程式(release branch)中的缺陷。在 release branch 從 master branch cherry pick 修復該缺陷的一個或多個 commit;
釋出新版本詳細步驟
- Coding上刪除release分支
- Coding上從master分支新建release
- 在伺服器上執行釋出新版本的指令碼
釋出補丁詳細步驟
- 先update整個工程
- git切換到release分支
- 執行git status命令
- 執行 git cherry-pick commit_id 命令
- 如果遇到衝突,解決衝突,解決衝突的辦法是接受他們的程式碼,解決衝突後commit file && push file,如沒遇衝突則直接push file
- 進入coding檢視release分支的程式碼是否有被更新,程式碼已更新則繼續下面步驟,沒有被更新則查詢原因
- 執行發版指令碼
- 通知對應的開發人員以及測試人員進行生產驗證
- 進入coding打上標籤,標籤命名為日期加上a-z的小寫字母
其他
- 並不是每個 bug 都有專門釋出 bugfix 版的必要,對於不緊急的 bug,可以 fix 後隨下一個版本釋出。
- master分支只有負責人有readwrite許可權,其他開發人員只有read許可權。release分支只有負責發版的人員有readwrite許可權。