conventional commit(約定式提交)

前言


此篇文檔基于 21 年年終述職大家提出的開發(fā)規(guī)范化管理和文檔化管理的建議买乃,結(jié)合 Conventional Commits 約定式提交規(guī)范 對 git 代碼作出提交規(guī)范化。

那什么是 Conventional Commits 約定式提交規(guī)范 呢金赦?

定義


Conventional Commits 是一種用于給提交信息增加人機可讀含義的規(guī)范蕴坪。它提供了一組用于創(chuàng)建清晰的提交歷史的簡單規(guī)則。

提交說明的結(jié)構(gòu)如下:

<類型>([可選的作用于]): <描述>

[可選的正文]

[可選的腳注]

作用


  • 自動化生成 CHANGELOG
  • 基于提交類型块蚌,自動決定語義化的版本變更
  • 向項目相關(guān)合作開發(fā)者發(fā)送變更信心
  • 觸發(fā)自動化構(gòu)建和部署流程
  • 給開發(fā)者提供一個更加結(jié)構(gòu)化的提交歷史,便于減低對項目做貢獻的難度

使用流程


git commit 最佳實踐膘格,cimmitizen + husky + commitlint 規(guī)范化校驗

cimmitizen

  1. 執(zhí)行以下命令
npm install -g commitizen

npm install -g cz-conventional-changelog

echo '{"path":"cz-conventional-changelog"}' > ~/.czrc
  1. 測試功能

執(zhí)行 git cz 提交代碼峭范,出現(xiàn)以下流程

// 選擇一個提交的類型
1. select the type of change that you're committing
type 含義
feat 新增功能
fix 修復(fù) bug
docs 更改文檔
style 不影響代碼含義的變化(空白,格式化瘪贱,缺少分號等)
refactor 重構(gòu)纱控,不修復(fù) bug 且不添加功能
perf 性能優(yōu)化代碼
build 構(gòu)建方面相關(guān)

// 更改影響的范圍,可不填
2. What is the scope of this change (e.g. component or file name): (press enter to skip)

// 簡短的描述
3. Write a short, imperative tense description of the change (max 88 chars)

// 具體描述
4. rovide a longer description of the change: (press enter to skip)

// 是否有破壞性的更改
5. Are there any breaking changes?

// 是否有關(guān)聯(lián)性的問題
6. Does this change affect any open issues?

如下圖:


cz流程.png

git log 查看提交日志

log.png

由上圖可以看出菜秦,提交了一個 fix(test)項甜害,也是符合了約定式提交規(guī)范

husky

  1. 安裝 husky

npm install husky —save-dev

  1. 安裝 git hooks
方法1:
npx husky install

方法2:配置package.json文件中script: "prepare": "husky install"
npm run prepare

  1. 測試 husky 鉤子,添加 pre-commit 鉤子
npx husky add .husky/pre-commit "npm test"

根目錄.husky 文件夾下生成 pre-commit 文件球昨,刪除 pre-commit 鉤子只需刪除文件即可

commitlint

  1. 安裝
npm install -g @commitlint/cli @commitlint/config-conventional
  1. 生成規(guī)范配置文件
echo "module.export = {extends:['@commitlint/config-conventional']}" > commitlint.config.js
  1. 根目錄.husky 文件夾下 pre-commit 文件中添加規(guī)則
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'
  1. 在 commitlint.config.js 文件中寫入規(guī)則
module.exports = {
  extends: ["@commitlint/config-conventional"],
  rules: {
    "type-enum": [
      2,
      "always",
      [
        "build",
        "ci",
        "chore",
        "docs",
        "feat",
        "fix",
        "perf",
        "refactor",
        "revert",
        "style",
        "test",
      ],
    ],
  },
};
  1. 測試提交功能
git add .
git commit -m 'xxx'

執(zhí)行完上兩步操作后尔店,終端出現(xiàn)報錯:

?   input: xxx
?   subject may not be empty [subject-empty]
?   type may not be empty [type-empty]

?   found 2 problems, 0 warnings
?   Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint

husky - commit-msg hook exited with code 1 (error)

兩個報錯:1. 缺少類型參數(shù) 2. 缺少描述信息
碰到這兩個報錯可以選擇兩種方式解決提交報錯問題

方法一: 按照規(guī)范,為 commit 信息添加入?yún)ⅰ@?git commit -m 'fix: 修改bug'
方法二: 使用 git cz嚣州,按步驟操作

standard-version

1.安裝
npm install standard-version

  1. package.json文件中配置
"scripts": {
    "release": "standard-version"
  }
  1. 提交代碼后執(zhí)行 npm run release

    release.png

    執(zhí)行完后自動升級版本號鲫售、自動生成CHAGNELOG文件,里面是之前提交的對應(yīng)版本號

  2. 生成的tags不會推送到遠程该肴,所以還要執(zhí)行最后一步
    git push --tag

    tag.png

    生成新tag并推送到遠程

最后去git上驗證就可以啦~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末情竹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子匀哄,更是在濱河造成了極大的恐慌秦效,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涎嚼,死亡現(xiàn)場離奇詭異棉安,居然都是意外死亡,警方通過查閱死者的電腦和手機铸抑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衷模,“玉大人鹊汛,你說我怎么就攤上這事≮逡保” “怎么了刁憋?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長木蹬。 經(jīng)常有香客問我至耻,道長,這世上最難降的妖魔是什么镊叁? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任尘颓,我火速辦了婚禮,結(jié)果婚禮上晦譬,老公的妹妹穿的比我還像新娘疤苹。我一直安慰自己,他們只是感情好敛腌,可當(dāng)我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布卧土。 她就那樣靜靜地躺著,像睡著了一般像樊。 火紅的嫁衣襯著肌膚如雪尤莺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天生棍,我揣著相機與錄音颤霎,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛捷绑,可吹牛的內(nèi)容都是我干的韩脑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼粹污,長吁一口氣:“原來是場噩夢啊……” “哼段多!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起壮吩,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤进苍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鸭叙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體觉啊,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年沈贝,在試婚紗的時候發(fā)現(xiàn)自己被綠了杠人。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡宋下,死狀恐怖嗡善,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情学歧,我是刑警寧澤罩引,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站枝笨,受9級特大地震影響袁铐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜横浑,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一剔桨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伪嫁,春花似錦领炫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至脚猾,卻和暖如春葱峡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背龙助。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工砰奕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蛛芥,地道東北人。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓军援,卻偏偏與公主長得像仅淑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子胸哥,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容