每個公司都有自己的一套git操作模式,但git的各種規範都是相同,下面總結了下常用開發規範操作
分支命名
master
- 主幹(預設)
一般master位于線上正式伺服器的版本,每一次在
master
上的送出或合并都應該伴随着版本号的變更。(這樣會更好的記錄和版本回退)
master 分支應保證是随時可釋出的(可能包含Bug),每個釋出的版本應打上 tag,便于復原。對于有重大 Bug 的版本,應備注,避免復原到錯誤的版本。
-
feature/*
- 特性分支
Example: feature/this-is-a-feature-name,名稱中間通過
-
分割。
該分支建立自
分支,充分測試後,合并到master
master
分支
開發人員使用的分支,針對每一個功能點
建立一個issue
,一般命名規範為feature
,該feature/<issue_number>-<feature_name>
下的每次送出格式為feature
,當#<issue_number> <description>
開發完畢後feature
到merge
,并關閉develop
issue
。
實際開發中,可能有些
算不上什麼功能上的需求,不太必要有feature
,是以命名時可以沒有issue
<issue_number>
。
實際開發中,每個新特征功能都應該進行獨立的測試,是以可能需要釋出到測試環境中供測試人員進行測試。目前開發流程不友善部署
分支,是以目前不進行feature
的獨立測試。feature
-
develop
- 測試分支
該分支建立自
分支,定期與master
分支同步,master
分支 在本featrue
到merge
後develop
到push
github
進行測試。
測試服運作此分支代碼,作為開發環境中的主分支使用,任務是收集各個
feature
分支。
合并到
分支的代碼必須是已經完成開發并在本地進行過充分測試的develop
,即feature
能夠交給測試人員測試的版本
。
因該分支上可能包含多個
,且 多個feature
可能處于不同階段,是以該分支一般不合并的到feature
master
-
release/*
- 預釋出版本
預釋出版本,當
收集夠了做一次版本釋出所需的代碼,就develop
出一個checkout -b
分支,作為上線前的最後測試,除了release
外不接受任何送出。确認釋出後分别bugfix
到merge
和master
develop
。
如果能夠明确定義版本,且明确定義 某版本包含哪些功能的情況下,可在 某版本 定義的功能全部開發完畢之後,建立
分支,進行release
灰階部署。master + release
-
緊急修複分支,當hotfix/*
上出現master
需要修複時,基于bug
建立master
分支,修複完成後分别hotfix
到merge
和master
develop
。
開發分支中可能存在Bug,直接修改就可以了,無須建立分支修複Bug,是以,
隻針對釋出的版本。hotfix/*
标簽命名
- 語義化版本 2.0.0
- 軟體版本周期
- 版本格式:主版本号.次版本号.修訂号,版本号遞增規則如下:
- 主版本号:當你做了不相容的 API 修改,通常是進行了大規模的重新設計,重新定義了 API。
- 次版本号:當你做了向下相容的功能性新增,通常對應釋出了
。feature/*
- 修訂号:當你做了向下相容的問題修正。通常對應釋出了
。hotfix/*
-
先行版本号及版本編譯資訊可以加到“主版本号.次版本号.修訂号”的後面,作為延伸。
Example:
Commit
Format<type>[(<scope>)]: <subject> // 空一行 [<body>]
Format with GitEmoji
:emoji1: :emoji2: 不超過 50 個字的摘要,首字母大寫,使用祈使語氣,句末不要加句号 送出資訊主體 引用相關 issue 或 PR 編号 <#110>
# Ref https://github.com/thoughtbot/dotfiles/blob/master/gitmessage # # 50-character subject line # # 72-character wrapped longer description. This should answer: # # * Why was this change necessary? # * How does it address the problem? # * Are there any side effects? # # Include a link to the ticket, if any. # # Add co-authors if you worked on this code with others: # # Co-authored-by: Full Name <[email protected]> # Co-authored-by: Full Name <[email protected]>
- type:
- feat - 新功能
- fix - 修複bug
- br - 此項特别針對bug号,用于向測試回報bug清單的bug修改情況
- test - 測試
- docs - 文檔()
- style - 格式(不影響代碼運作的變動)
- refactor - 重構(即不是新增功能,也不是修改bug的代碼變動)
- chore - 建構過程或輔助工具的變動
- revert - 執行了
git-revert
-
scope
scope用于說明 commit 影響的範圍,比如資料層、控制層、視圖層等等,視項目不同而不同。
-
Develop -> Deploy
- 建立分支
git checkout feature/xxx
注意:
應基于feature/xxx
,是以 此時指令應在master
分支上進行master
- 修改
git add
git commit
- 推送到遠端
git push
- 同步
分支,自動部署develop
分支部署到develop
伺服器demo
git branch -f develop feature/xxx
自定義快捷指令,放到git push -f origin develop
~/.bashrc
中即可~/.zshrc
usage:function gitdd () { echo 'deploy current branch to demo' git branch -f develop HEAD git push -f origin develop }
以上指令在目前分支gitdd
下進行,不需要切換分支feature/xxx
-
Pull Request
請求将
合并到feature/xxx
上master
- 部署正式服
- 将分支 切回
master
此時git checkout master
已經完成任務,可以删除feature/xxx
- · 打 Tag,部署正式服 服務自動處理
-
git tag vx.x.x
-
git push origin vx.x.x
-
- 建立
,部署正式服release/vx.x.x
-
git branch release/vx.x.x
-
git push origin release/vx.x.x
-
- 将分支 切回