(轉(zhuǎn)載)Git提交信息規(guī)范化

Git提交信息規(guī)范化

image.png

目的

  • 統(tǒng)一團隊Git Commit標(biāo)準(zhǔn),便于后續(xù)代碼review、版本發(fā)布、自動化生成change log;
  • 可以提供更多更有效的歷史信息,方便快速預(yù)覽以及配合cherry-pick快速合并代碼;
  • 團隊其他成員進(jìn)行類git blame時可以快速明白代碼用意;

Git版本規(guī)范

分支

  • master分支為主分支(保護分支),不能直接在master上進(jìn)行修改代碼和提交;
  • develop分支為測試分支,所以開發(fā)完成需要提交測試的功能合并到該分支;
  • feature分支為開發(fā)分支,大家根據(jù)不同需求創(chuàng)建獨立的功能分支,開發(fā)完成后合并到develop分支;
  • fix分支為bug修復(fù)分支,需要根據(jù)實際情況對已發(fā)布的版本進(jìn)行漏洞修復(fù);

Tag

采用三段式,v版本.里程碑.序號,如v1.2.1

  • 架構(gòu)升級或架構(gòu)重大調(diào)整,修改第2位
  • 新功能上線或者模塊大的調(diào)整,修改第2位
  • bug修復(fù)上線,修改第3位
    具體操作,可參見:Git標(biāo)簽、Git基礎(chǔ)-打標(biāo)簽

changelog

版本正式發(fā)布后,需要生產(chǎn)changelog文檔,便于后續(xù)問題追溯。

Git提交信息

message信息格式采用目前主流的Angular規(guī)范,這是目前使用最廣的寫法,比較合理和系統(tǒng)化,并且有配套的工具。

image.png

commit message格式說明

Commit message一般包括三部分:Header、Body和Footer。

Header

type(scope):subject

  • type:用于說明commit的類別,規(guī)定為如下幾種
    • feat:新增功能;
    • fix:修復(fù)bug;
    • docs:修改文檔;
    • refactor:代碼重構(gòu),未新增任何功能和修復(fù)任何bug;
    • build:改變構(gòu)建流程,新增依賴庫、工具等(例如webpack修改);
    • style:僅僅修改了空格、縮進(jìn)等,不改變代碼邏輯;
    • perf:改善性能和體現(xiàn)的修改;
    • chore:非src和test的修改;
    • test:測試用例的修改;
    • ci:自動化流程配置修改;
    • revert:回滾到上一個版本;
  • scope:【可選】用于說明commit的影響范圍
  • subject:commit的簡要說明,盡量簡短

Body

對本次commit的詳細(xì)描述,可分多行

Footer

  • 不兼容變動:需要描述相關(guān)信息
  • 關(guān)閉指定Issue:輸入Issue信息

commit message工具

Commitizen是一個主流的 Commit message 的生成工具,支持Angular的commit message格式,被眾多主流框架采用。

$ npm install -g commitizen

安裝完成后,需要在項目目錄下,輸入以下命令來初始化您的項目以使用cz-conventional-changelog適配器

$ commitizen init cz-conventional-changelog --save --save-exact

上述命令會干3件事情:
- 安裝cz-conventional-changelog
- 保存其依賴到package.json中
- 添加config.commitizen key到package.json中,如下:
"config": { "commitizen": { "path": "./node_modules/cz-conventional-changelog" } }

然后使用git cz代替git commit命令即可,或者可以增加友好的npm命令,通過npm run commit進(jìn)行提交!

"script": {
    "commit": "git-cz"
}

也可以本地安裝:

$ npm install --save-dev commitizen

使用項目內(nèi)的本地

$ ./node_modules/.bin/commitizen init cz-conventional-changelog --save-dev --save-exact
$ ./node_modules/.bin/git-cz

生成change log文件

cz-conventional-changelog 可以自動根據(jù)提交信息生成change log,便于統(tǒng)一管理和查閱!

$ npm install -g conventional-changelog-cli

進(jìn)入項目執(zhí)行

# 在之前生成的基礎(chǔ)上,疊加
$ conventional-changelog -p angular -i CHANGELOG.md -s
# 生成所有記錄,包括之前的
$ conventional-changelog -p angular -i CHANGELOG.md -s -r 0

同樣可以創(chuàng)建npm腳本,來更方便的操作

"scripts": {
    "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0 && git add CHANGELOG.md"
}

強制驗證提交信息

采用Git hooks來攔截提交信息,進(jìn)行格式判斷。這里使用commit-msg鉤子,該鉤子接收一個參數(shù)(存有當(dāng)前提交信息的臨時文件的路徑)。如果該鉤子腳本以非0退出,Git將放棄提交。

yorkie用于執(zhí)行g(shù)it-hooks,首先在package.json中增加相關(guān)配置

$ npm  i --D yorkie
"gitHooks": {
    "commit-msg": "node git-hooks/verify-commit-msg.js"
}

verify-commit-msg.js

const chalk = require('chalk')
const msgPath = process.env.GIT_PARAMS
const msg = require('fs').readFileSync(msgPath, 'utf-8').trim()

const commitRE = /^(revert: )?(feat|fix|polish|docs|style|refactor|perf|test|workflow|ci|chore|types|build)(\(.+\))?: .{1,50}/

if (!commitRE.test(msg)) {
  console.error(
    `  ${chalk.bgRed.white(' ERROR ')} ${chalk.red(`invalid commit message format.`)}\n\n` +
    chalk.red(`  Proper commit message format is required for automated changelog generation. Examples:\n\n`) +
    `    ${chalk.green(`feat(compiler): add 'comments' option`)}\n` +
    `    ${chalk.green(`fix(v-model): handle events on blur (close #28)`)}\n\n` +
    chalk.red(`  You can also use ${chalk.cyan(`npm run commit`)} to interactively generate a commit message.\n`)
  )
  process.exit(1)
}

參考地址:自定義Git-Git鉤子
————————————————
版權(quán)聲明:本文為CSDN博主「奮飛」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/ligang2585116/article/details/80284819

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容