溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Git規(guī)范操作實(shí)例分析

發(fā)布時(shí)間:2022-04-21 10:54:26 來(lái)源:億速云 閱讀:209 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“Git規(guī)范操作實(shí)例分析”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

規(guī)范說(shuō)明

git commit message即代碼提交歷史,錯(cuò)誤的提交信息會(huì)影響代碼的可維護(hù)性。在多人協(xié)作開(kāi)發(fā)場(chǎng)景下因個(gè)人風(fēng)格各有不同,若無(wú)統(tǒng)一的規(guī)范則很容易導(dǎo)致混亂。目前規(guī)范使用較多的是 Angular 團(tuán)隊(duì)的規(guī)范。

消息提交格式

每個(gè)提交消息都包含一個(gè)header、body、footer。header具備一種特殊的格式,其中包括typescopesubject

<type>(<scope>): <subject><BLANK LINE><body><BLANK LINE><footer>

為使在各種git工具中更易于閱讀,提交消息的任何一行都不能超過(guò)100個(gè)字符。

Header

  • type
    必需為以下之一開(kāi)頭:

    • feat:一項(xiàng)新的功能feature

    • fix:  bug修復(fù)

    • docs: 只修改了文檔

    • style: 沒(méi)有代碼的更改,樣式調(diào)整(空白,格式,缺少分號(hào)等)

    • refactor: 代碼重構(gòu),既不修正bug也不添加功能(feature)的更改

    • perf: 改進(jìn)性能的代碼更改

    • test: 增加缺失或者更正現(xiàn)有測(cè)試

    • build: 影響構(gòu)建系統(tǒng)或者外部依賴(lài)項(xiàng)的更改,如:gulpbroccolinpm

    • ci: 對(duì)CI配置文件和腳本的更改,如:Travis,Circle,BrowserStack,SauceLabs

    • chore: 更改構(gòu)建過(guò)程或者輔助工具和庫(kù),例如文檔生成等

    • revert: 假如該提交復(fù)原了先前的提交,則應(yīng)以revert:開(kāi)頭 ,后接reverted commitheader。此外body中應(yīng)該標(biāo)明:This reverts commit <hash>,其中hash是要復(fù)原的提交的SHA值。

  • scope
    scope是可選的。
    用于輔助說(shuō)明所要提交代碼更改的內(nèi)容歸屬,例如可以指明是哪個(gè)位置(location)、哪個(gè)模塊(module)、哪個(gè)組件(componet)等。當(dāng)更改影響的范圍不止一個(gè)范圍時(shí),可以使用*

  • subject
    該主題包含對(duì)變更的簡(jiǎn)潔形容:
    使用現(xiàn)在時(shí)態(tài):“change”不是“ changed”也不是“ changes”
    不要大寫(xiě)第一個(gè)字母
    末尾沒(méi)有點(diǎn)(。)

Body

就像在主題(subject)中一樣,使用命令式現(xiàn)在時(shí)態(tài):“change”而不是“changed”或者“changes”。 body應(yīng)包括改變的動(dòng)機(jī),并將其與以前的行為進(jìn)行比照。

Footer

  • 不兼容變動(dòng)
    假如當(dāng)前代碼與上一個(gè)版本不兼容,則 Footer 部分以 BREAKING CHANGE 開(kāi)頭,用空格或者兩個(gè)換行符,后面是對(duì)變動(dòng)的形容、以及變動(dòng)理由和遷移方法。如fix并攜帶BREAKING CHANGE信息:

fix: correct spelling of referrer in headerBREAKING CHANGE: Rather than using misspelled "Referer" as name of header,instead use correct spelling "Referrer". Clients expecting "Referer" will nolonger receive that header  and will presumably not honor the new "Referrer"until updated to support this new name for this header.
  • 關(guān)閉 Issue
    假如當(dāng)前 commit 針對(duì)某個(gè)issue,那么可以在 Footer 部分關(guān)閉這個(gè)關(guān)聯(lián)issue 。

Closes #123

或者者關(guān)閉多個(gè)issue

Closes #123 #456 #789

項(xiàng)目配置

現(xiàn)在比較流行的方案是商定式提交規(guī)范(Conventional Commits),它受到了 Angular 提交原則的啟發(fā),并在很大程度上以其為依據(jù)。筆者嘗試查找了基于非node環(huán)境相關(guān)的Git規(guī)范化的輔助工具或者插件,并沒(méi)有找到很好的處理方案,而我們假如擁有node環(huán)境非node項(xiàng)目也可以正常配置執(zhí)行,只不過(guò)在工程中會(huì)生成node項(xiàng)目相關(guān)的文件,如node_modules文件夾、package.json文件等,因而在項(xiàng)目的版本控制中略微麻煩少量,根據(jù)需要定義自己的ingore文件,解決好項(xiàng)目代碼和環(huán)境代碼的問(wèn)題。

環(huán)境和工具

  • node

  • npm(npx)

  • commitizen/cz-cli: 是一個(gè)格式化commit message的工具,可以束縛提交者按照制定的規(guī)范一步一步的填寫(xiě)commit message。

  • cz-conventional-changelog:  為 commitizen 指定一個(gè) Adapter ,一個(gè)符合 Angular 團(tuán)隊(duì)規(guī)范的 preset(按照我們指定的規(guī)范幫助我們生成 commit message)

非node項(xiàng)目

定位到workspace目錄(即項(xiàng)目根目錄)命令行輸入npm init,執(zhí)行后會(huì)出現(xiàn)一系列初始化的提醒,可以一直回車(chē)至結(jié)束。

依賴(lài)安裝

  • 安裝commitizencz-conventional-changelog

npm i -D commitizen
npm i -D cz-conventional-changelog
  • 修改package.json文件
    Git規(guī)范操作實(shí)例分析工程的配置示例.png

{  "name": "testp",  "version": "1.0.0",  "description": "",  "main": "index.js",  "scripts": {    "test": "echo \"Error: no test specified\" && exit 1",    "commit": "git-cz"  },  "config": {    "commitizen": {      "path": "node_modules/cz-conventional-changelog"    }  },  "author": "",  "license": "ISC",  "devDependencies": {    "commitizen": "^4.2.3",    "cz-conventional-changelog": "^3.3.0"  }}

在項(xiàng)目根目錄,命令行執(zhí)行npm run commit,會(huì)出現(xiàn)操作步驟提醒,按前文所訴填寫(xiě)規(guī)范化信息。

Git規(guī)范操作實(shí)例分析操作提醒.png
Git規(guī)范操作實(shí)例分析操作提醒..png
執(zhí)行完,sourcetree效果圖:
Git規(guī)范操作實(shí)例分析效果圖.png

Commit信息校驗(yàn)和阻攔

盡管我們?cè)陧?xiàng)目中配置了commit,但是假如我執(zhí)行規(guī)范操作,不使用npm run commit提交代碼,通過(guò)命令行或者者Git可視化工具直接commit,那么提交上去的可能是不規(guī)范的信息,因而需要對(duì)git命令進(jìn)行阻攔,并對(duì)message內(nèi)容做lint操作。

  • lint工具依賴(lài)安裝

    • commitlint/cli 【命令行工具】

    • commitlint/config-conventional 【校驗(yàn)規(guī)則】符合 Angular團(tuán)隊(duì)規(guī)范。

npm i -D @commitlint/config-conventional @commitlint/cli
  • 修改 package.json,配置commitlint

{   ...  "scripts": {    "test": "echo \"Error: no test specified\" && exit 1",    "commit": "git-cz",    "commit-lint": "commitlint -e $HUSKY_GIT_PARAMS"  },  "config": {    "commitizen": {      "path": "node_modules/cz-conventional-changelog"    }  },  "commitlint": {    "extends": [      "@commitlint/config-conventional"    ]  },  ...}
  • 安裝Husky,進(jìn)行git hooks校驗(yàn)

  npm install husky --save-dev
  • 啟用git hooks

npx husky install

git hooks啟用后會(huì)在項(xiàng)目根目錄下生產(chǎn).husky的文件夾

iGit規(guī)范操作實(shí)例分析

  • 增加commit_msg到husky,用于阻攔git commit命令

npx husky add .husky/commit-msg "npm run commit-lint"

執(zhí)行完成后會(huì)生成commit-msg的腳本

Git規(guī)范操作實(shí)例分析commit-msg-shell.png
此時(shí)我們?cè)诿钚兄苯訄?zhí)行git commit -m "test message",會(huì)被阻攔提醒提交失敗。
Git規(guī)范操作實(shí)例分析image.png

SourceTree的問(wèn)題

通過(guò)上面配置完成后用SourceTree提交代碼會(huì)發(fā)現(xiàn)運(yùn)行錯(cuò)誤。

Git規(guī)范操作實(shí)例分析image.png
這是由于SourceTree沒(méi)有讀取到環(huán)境變量信息,需要在commit-msg腳本中增加環(huán)境變量的配置。
Git規(guī)范操作實(shí)例分析image.png

#!/bin/sh. "$(dirname "$0")/_/husky.sh"export PATH=/usr/local/bin:$PATHnpm run commit-lint --silent

此刻再運(yùn)行,已成功阻攔


Git規(guī)范操作實(shí)例分析

說(shuō)明

  • cz-conventional-changelog提交信息提醒和@commitlint/config-conventionallint規(guī)則都可以設(shè)置自己設(shè)置的Adapter,可以根據(jù)自己需要配置適合自己團(tuán)隊(duì)的規(guī)范。

  • 文章截圖是以非node(Android)項(xiàng)目的視角進(jìn)行的配置,其余項(xiàng)目也相似,只需使用的Git進(jìn)行的版本控制,都可以實(shí)現(xiàn)Commit Message的規(guī)范化校驗(yàn)。

  • 文章依賴(lài)的是Mac OS,Windows下相似,所有的依賴(lài)庫(kù)在Windows下也可運(yùn)行工作,只不過(guò)環(huán)境的配置方式不同而已。

“Git規(guī)范操作實(shí)例分析”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

git
AI