git Hook

git hook (git鉤子||git 回調(diào))


微信截圖_20231030095800.png
使用 husky + commitlint 檢查提交描述是否符合規(guī)范要求

使用git hook去校驗(yàn)我們的提交信息诱渤,需要用到兩個(gè)工具
1抛丽、commitlint:用于檢查提交信息
2捅位、husky:是git hooks工具

注意:npm需要在7.x以上版本
commitlint

1拜轨、安裝依賴

  npm install --save-dev @commitlint/config-conventional@12.1.4 @commitlint/cli@12.1.4

2印颤、創(chuàng)建commitlint.config.js文件事甜,也可以直接在終端輸入

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

3馒疹、打開(kāi)commitlint.config.js佳簸,增加配置項(xiàng)()

module.exports = {
  // 繼承的規(guī)則
  extends: ['@commitlint/config-conventional'],
  // 定義規(guī)則類型
  rules: {
    // type 類型定義,表示 git 提交的 type 必須在以下類型范圍內(nèi)
    'type-enum': [
      2,
      'always',
      [
        'feat', // 新功能 feature
        'fix', // 修復(fù) bug
        'docs', // 文檔注釋
        'style', // 代碼格式(不影響代碼運(yùn)行的變動(dòng))
        'refactor', // 重構(gòu)(既不增加新功能颖变,也不是修復(fù)bug)
        'perf', // 性能優(yōu)化
        'test', // 增加測(cè)試
        'chore', // 構(gòu)建過(guò)程或輔助工具的變動(dòng)
        'revert', // 回退
        'build' // 打包
      ]
    ],
    // subject 大小寫(xiě)不做校驗(yàn)
    'subject-case': [0]
  }
}
注意:確保格式是utf-8,否則會(huì)報(bào)錯(cuò)

husky

1生均、安裝依賴

npm install husky@7.0.1 --save-dev

2、啟動(dòng)hooks腥刹,生成.husky文件夾

npx husky install

3马胧、在package.json中生成prepare指令(npm需要在7.x以上版本)

npm set-script prepare "husky install"

4、執(zhí)行prepare指令

npm run prepare

5衔峰、添加commitlint的hook到husky中佩脊,并指令在commit-msg的hooks下執(zhí)行npx --no-install commitlint --edit "$1"的指令

npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'

6、


2.png

至此垫卤,不符合規(guī)范的commit將不再可提交

通過(guò) pre-commit 檢測(cè)提交時(shí)代碼規(guī)范

我們期望通過(guò) husky 監(jiān)測(cè) pre-commit 鉤子威彰,在該鉤子下執(zhí)行 npx eslint --ext .js,.vue src 指令來(lái)去進(jìn)行相關(guān)檢測(cè):
1、執(zhí)行 npx husky add .husky/pre-commit "npx eslint --ext .js,.vue src" 添加 commit 時(shí)的 hook (npx eslint --ext .js,.vue src 會(huì)在執(zhí)行到該 hook 時(shí)運(yùn)行)(window用戶直接2)
2穴肘、手動(dòng)創(chuàng)建pre-commit文件歇盼,并填入以下內(nèi)容

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npx eslint --ext .js,.vue src

3、關(guān)閉 VSCode 的自動(dòng)保存操作
4梢褐、修改一處代碼旺遮,使其不符合 ESLint 校驗(yàn)規(guī)則
5、執(zhí)行 提交操作 會(huì)發(fā)現(xiàn)盈咳,拋出一系列的錯(cuò)誤耿眉,代碼無(wú)法提交

如果拋出很多的 ESLint 錯(cuò)誤怎么辦,有沒(méi)有辦法可以 ”自動(dòng)“ 幫助他修復(fù)對(duì)應(yīng)的問(wèn)題鱼响,并且完成提交呢鸣剪?

lint-staged 自動(dòng)修復(fù)格式錯(cuò)誤

pre-commit 處理了 檢測(cè)代碼的提交規(guī)范問(wèn)題,當(dāng)我們進(jìn)行代碼提交時(shí),會(huì)檢測(cè)所有的代碼格式規(guī)范 筐骇。
但是這樣會(huì)存在兩個(gè)問(wèn)題:
1债鸡、我們只修改了個(gè)別的文件,沒(méi)有必要檢測(cè)所有的文件代碼格式
2铛纬、它只能給我們提示出對(duì)應(yīng)的錯(cuò)誤厌均,我們還需要手動(dòng)的進(jìn)行代碼修改
需要使用另外一個(gè)插件 lint-staged

npm i lint-staged --legacy-peer-deps

lint-staged 可以讓你當(dāng)前的代碼檢查 只檢查本次修改更新的代碼告唆,并在出現(xiàn)錯(cuò)誤的時(shí)候棺弊,自動(dòng)修復(fù)并且推送
lint-staged 無(wú)需單獨(dú)安裝,我們生成項(xiàng)目時(shí)擒悬,vue-cli 已經(jīng)幫助我們安裝過(guò)了模她,所以我們直接使用就可以了
1、修改 package.json 配置

"lint-staged": { 
    "src/**/*.{js,vue}": [
      "eslint --fix",
      "git add"
    ]

}
2懂牧、修改 .husky/pre-commit 文件

 #!/bin/sh    
. "$(dirname "$0")/_/husky.sh"
npx lint-staged
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末侈净,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子僧凤,更是在濱河造成了極大的恐慌畜侦,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拼弃,死亡現(xiàn)場(chǎng)離奇詭異夏伊,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)吻氧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)咏连,“玉大人盯孙,你說(shuō)我怎么就攤上這事∷畹危” “怎么了振惰?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)垄懂。 經(jīng)常有香客問(wèn)我骑晶,道長(zhǎng),這世上最難降的妖魔是什么草慧? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任桶蛔,我火速辦了婚禮,結(jié)果婚禮上漫谷,老公的妹妹穿的比我還像新娘仔雷。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布碟婆。 她就那樣靜靜地躺著电抚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪竖共。 梳的紋絲不亂的頭發(fā)上蝙叛,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音公给,去河邊找鬼借帘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛妓布,可吹牛的內(nèi)容都是我干的姻蚓。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼匣沼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼狰挡!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起释涛,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤加叁,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后唇撬,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體它匕,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年窖认,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了豫柬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡扑浸,死狀恐怖烧给,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情喝噪,我是刑警寧澤础嫡,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站酝惧,受9級(jí)特大地震影響榴鼎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晚唇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一巫财、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧缺亮,春花似錦翁涤、人聲如沸桥言。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)号阿。三九已至,卻和暖如春鸳粉,著一層夾襖步出監(jiān)牢的瞬間扔涧,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工届谈, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留枯夜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓艰山,卻偏偏與公主長(zhǎng)得像湖雹,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子曙搬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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