git 工作流和git commit規範

四元小哥發表於2019-06-16

目的

  • 統一團隊的Git工作流,包括分支使用、tag規範、issue等
  • 統一團隊的Git Commit日誌標準,便於後續程式碼review,版本釋出以及日誌自動化生成

git工作流

  • git flow工作流:

    • master為主分支,屬保護分支,不能直接在此進行程式碼修改和提交。
    • develop為日常使用分支。
    • feature新功能分支,當完成一個功能並測試通過後進行合併到develop分支中。
    • hotfix線上緊急漏洞修復分支,從master分支拉取建立,修復完bug後合併到master和develop分支中。
  • gitlab flow工作流(最大原則叫做"上游優先"(upsteam first),即只存在一個主分支master,它是所有其他分支的"上游"。只有上游分支採納的程式碼變化,才能應用到其他分支):

master->pre-production->production

  • master開發環境分支
  • pre-production預發環境分支
  • production生產環境分支

git commit規範

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
複製程式碼
佔位標籤解析:
type:代表某次提交的型別,比如是修復一個bug還是增加一個新的feature。所有的type型別如下:
scope:scope說明commit影響的範圍。scope依據專案而定,
		例如在業務專案中可以依據選單或者功能模組劃分,
		如果是元件庫開發,則可以依據元件劃分。
subject:是commit的簡短描述
body:提交程式碼的詳細描述
footer:如果程式碼的提交是不相容變更或關閉缺陷,則Footer必需,否則可以省略。

feat[特性]:新增feature 
fix[修復]: 修復bug     
docs[文件]: 僅僅修改了文件,比如README, CHANGELOG, CONTRIBUTE等等
style[格式]: 僅僅修改了空格、格式縮排、都好等等,不改變程式碼邏輯
refactor[重構]: 程式碼重構,沒有加新功能或者修復bug
perf[優化]: 優化相關,比如提升效能、體驗
test[測試]: 測試用例,包括單元測試、整合測試等
chore[工具]: 改變構建流程、或者增加依賴庫、工具等
revert[回滾]: 回滾到上一個版本
複製程式碼

示例:

特性:新增頭像功能
特性:新增收藏功能
修復:在android機器上傳崩潰問題解決
文件:修改README,增加了使用說明
優化:首頁圖片載入緩慢優化
重構:對頭像功能進行封裝重構
複製程式碼

Git標籤打包規範

**Tag版本號:**Tag包括3位版本,字首使用v。比如v1.2.31。
Tag命名規範:
1.新功能開發使用第2位版本號,bug修復使用第3位版本號
2.首版本號是全新的功能類,功能模組上線才做的調整

**標題格式:專案名-日期
內容格式:<分類>---<內容>
<分類>:**新功能、bug修復、優化、依賴升級、重構、漏洞&補丁

示例:

此圖片引用自:我們的GIT工作流

163f2c20f375472a.jpeg

Git Commit格式校驗

  • 準備commitlint/cli用於格式校驗
  • 準備husky用於git提交程式碼時觸發校驗
  1. 全域性安裝commitlint/cli
npm install -g @commitlint/cli @commitlint/config-conventional
複製程式碼

2.在專案根目錄建立配置檔案commitlint.config.js,可以使用以下命令建立

echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js
複製程式碼

3.在配置檔案中定義提交規範,可使用以下配置:

"module.exports = {extends: ['@commitlint/config-conventional']}"

module.exports = {
  extends: ['@commitlint/config-conventional'],
  rules: {
    'type-enum': [2, 'always', [
      "feat", "fix", "docs", "style", "refactor", "test", "chore", "revert"
    ]],
    'subject-full-stop': [0, 'never'],
    'subject-case': [0, 'never']
  }
};
複製程式碼

4.專案新增husky,進行git提交觸發校驗,安裝如下:

npm install husky --save-dev
複製程式碼

5.安裝完成後在package.json中配置如下資訊

"scripts": {
    "commitmsg": "commitlint -e $GIT_PARAMS",
 },
 "config": {
    "commitizen": {
      "path": "cz-customizable"
    }
 },
複製程式碼

6.經過以上步驟,git commit的規範校驗已經完成。可以進行程式碼提交了。

不規範提交>git commit -m "新增新功能"
提示:
⧗   input: 新增新功能
✖   subject may not be empty [subject-empty]
✖   type may not be empty [type-empty]

規範提交>git commit -m "feat: 新增新功能"
複製程式碼

漢化與自定義校驗規則

1.當前專案安裝commitlint-config-cz,如下

npm install commitlint-config-cz --save-dev
複製程式碼

2.commitlint校驗規則配置新增如下設定:

module.exports = {
  extends: [
    'cz'
  ]
};
複製程式碼

3.下載官方配置檔案進行修改。官方配置檔案cz-config-EXAMPLE.js。修改示例如下:

'use strict';

module.exports = {

  types: [
    {value: '特性',name: '特性:    一個新的特性'},
    {value: '修復',name: '修復:    修復一個Bug'},
    {value: '文件',name: '文件:    變更的只有文件'},
    {value: '格式',name: '格式:    空格, 分號等格式修復'},
    {value: '重構',name: '重構:    程式碼重構,注意和特性、修復區分開'},
    {value: '效能',name: '效能:    提升效能'},
    {value: '測試',name: '測試:    新增一個測試'},
    {value: '工具',name: '工具:    開發工具變動(構建、腳手架工具等)'},
    {value: '回滾',name: '回滾:    程式碼回退'}
  ],

  scopes: [
    {name: '使用者模組'},
    {name: '訂單模組'},
    {name: '社群模組'},
    {name: '商品模組'}
  ],

  // it needs to match the value for field type. Eg.: 'fix'
  /*
  scopeOverrides: {
    fix: [
      {name: 'merge'},
      {name: 'style'},
      {name: 'e2eTest'},
      {name: 'unitTest'}
    ]
  },
  */
  // override the messages, defaults are as follows
  messages: {
    type: '選擇一種你的提交型別:',
    scope: '選擇一個scope (可選):',
    // used if allowCustomScopes is true
    customScope: 'Denote the SCOPE of this change:',
    subject: '簡要說明:\n',
    body: '詳細說明,使用"|"換行(可選):\n',
    breaking: '非相容性說明 (可選):\n',
    footer: '關聯關閉的issue,例如:#31, #34(可選):\n',
    confirmCommit: '確定提交?'
  },

  allowCustomScopes: true,
  allowBreakingChanges: ['特性', '修復'],

  // limit subject length
  subjectLimit: 100

};
複製程式碼

生成changelog

1.安裝conventional-changelog,可以快速生成提交日誌

npm install -g conventional-changelog-cli
npm install -g cz-conventional-changelog
複製程式碼

2.專案根目錄下新增 .czrc 配置檔案,檔案內容如下

{ "path": "cz-conventional-changelog" }
複製程式碼

3.在package.json中的scripts項增加如下指令

"version": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0 && git add CHANGELOG.md"
複製程式碼

4.執行npm run version即可在當前目錄生成changelog日誌了。

參考:
我們的GIT工作流 
Cz工具集使用介紹 - 規範Git提交說明
git工作流程

相關文章