俗話說,沒有規(guī)矩不成方圓,我們的git也需要規(guī)范。
下面介紹一下企業(yè)常用的一些規(guī)范。
分支管理規(guī)范
分支命名不能千奇百怪,必須有統(tǒng)一的命名方式。主要有以下幾種:
分支管理 | 命名規(guī)范 | 解釋 |
---|---|---|
master 主分支 | master | 穩(wěn)定版本分支,上線完成回歸后后,由項(xiàng)目技術(shù)負(fù)責(zé)人從 release 分支合并進(jìn)來,并打 tag |
test 測(cè)試分支 | test/yyyyMMdd_ 功能名稱示例:test/20220426_blog | 測(cè)試人員使用分支,測(cè)試時(shí)從 feature 分支合并進(jìn)來 |
feature 功能開發(fā)分支 | feature/yyyyMMdd_ 功能名稱_負(fù)責(zé)人員示例:feature/20220426_blog_xiumubai | 新功能開發(fā)使用分支,基于master建立 |
fix bug修復(fù)分支 | fix/yyyyMMdd_ 功能名稱_負(fù)責(zé)人員示例:fix/20220426_blog_xiumubai | 緊急線上bug修復(fù)使用分支,基于master建立 |
release 上線分支 | release/版本號(hào)示例:release/0.1.0 | 用于上線的分支,基于 master 建立,必須對(duì)要并入的 feature 分支進(jìn)行 Code review 后,才可并入上線 |
版本號(hào)管理規(guī)范
當(dāng)我們上線的時(shí)候,需要給版本號(hào)打tag,下面是版本號(hào)規(guī)范:
項(xiàng)目上線release分支創(chuàng)建定義: ?? 第一個(gè)數(shù)字是主版本。第二個(gè)數(shù)字是次版本。第三個(gè)數(shù)字是補(bǔ)丁版本(hotfix?類的更新)。 主版本:含有破壞性更新、大調(diào)整等。?例如:1.1.0?>?2.0.0 次版本:增加新功能特性。例如:1.1.0?>?1.2.0 補(bǔ)丁版本:修復(fù)問題等。例如:1.1.0?>?1.1.1
下圖是一個(gè)圍繞git規(guī)范來的開發(fā)流程圖:
提交信息規(guī)范
最后是commit的時(shí)候,需要對(duì)commit信息規(guī)范,必須要加前綴
前綴 | 解釋 |
---|---|
feat | 新功能 |
fix | 修復(fù) |
docs | 文檔變更 |
style | 代碼格式 |
refactor | 重構(gòu) |
perf | 性能優(yōu)化 |
test | 增加測(cè)試 |
revert | 回退 |
build | 打包 |
chore | 構(gòu)建過程或輔助工具的變動(dòng) |
下圖是vue3源碼的提交信息規(guī)范:
下面我們就實(shí)際操作一下,如果通過husky+commitlint集成一個(gè)統(tǒng)一規(guī)范的git commit信息。
配置 git 提交的校驗(yàn)鉤子
- husky: git提交時(shí)觸發(fā)hooks
- commitlint: 對(duì)提交的內(nèi)容做規(guī)范校驗(yàn) husky,主要對(duì)pre-commit和commit-msg鉤子做校驗(yàn)。
#?安裝husky yarn?add?husky?-D #?初始化husky配置,在根目錄新增.husky配置文件。初始化配置pre-commit npx?husky-init? #?另外新增一個(gè)hooks,commit-msg npx?husky?add?.husky/commit-msg
目錄結(jié)構(gòu)是下面這樣子的:
在commit-msg文件中添加 npm run commitlint
在pre-commit文件中有個(gè)npm run test我們先注釋掉,不然會(huì)報(bào)錯(cuò)。
安裝commitlint
#?添加依賴文件 yarn?add?@commitlint/config-conventional?@commitlint/cli?-D
添加配置文件,新建commitlint.config.js,然后添加下面的代碼:
module.exports?=?{ ??extends:?['@commitlint/config-conventional'], ??//?校驗(yàn)規(guī)則 ??rules:?{ ????'type-enum':?[ ??????2, ??????'always', ??????[ ????????'feat', ????????'fix', ????????'docs', ????????'style', ????????'refactor', ????????'perf', ????????'test', ????????'chore', ????????'revert', ????????'build', ??????], ????], ????'type-case':?[0], ????'type-empty':?[0], ????'scope-empty':?[0], ????'scope-case':?[0], ????'subject-full-stop':?[0,?'never'], ????'subject-case':?[0,?'never'], ????'header-max-length':?[0,?'always',?72], ??}, }
配置scripts
因?yàn)槲覀冃枰\(yùn)行npm run commitlint,所以需要在package.json文件中添加如下代碼:
#?在scrips中添加下面的代碼 { "scripts":?{ ????"commitlint":?"commitlint?--config?commitlint.config.js?-e?-V" ??}, }
配置結(jié)束,現(xiàn)在當(dāng)我們填寫commit信息的時(shí)候,前面就需要帶著下面的subject
'feat', 'fix', 'docs', 'style', 'refactor', 'perf', 'test', 'chore', 'revert', 'build',
比如:git commit -m “feat: test”,注意feat:后面有個(gè)空格
我們來寫一個(gè)錯(cuò)誤的來測(cè)試一下:
提示subject是空的。
使用正確的提交方式,提交成功了
使用 commitizen 做git規(guī)范化提交
由于添加了commitlint驗(yàn)證,對(duì)于不熟悉提交規(guī)范的新手同學(xué)會(huì)有一定影響,可以添加 commitizen 工具,手動(dòng)生成規(guī)范化commit。
Commitizen是一個(gè)格式化commit message的工具。
#?工具安裝 yarn?add?-D?commitizen
使用cz-conventional-changelog
安裝工具
yarn?add?cz-conventional-changelog?-D
配置命令
"script":?{ ????"commit":?"cz" }
在package.json 中添加定義commitizen使用規(guī)則,
{ "config":?{ ????"commitizen":?{ ??????"path":?"./node_modules/cz-conventional-changelog" ????} ??}, }
當(dāng)執(zhí)行g(shù)it commit的時(shí)候,就可以提示我們填寫代碼規(guī)則了
自定義 commitizen 規(guī)則
使用 cz-customizable 工具
#?安裝依賴 yarn?add?cz-customizable?-D
配置命令
"script":?{ ????"commit":?"git-cz" }
在package.json 中添加自定義commitizen,使用git-cz執(zhí)行g(shù)it commit命令
"config":?{ ????"commitizen":?{ ????????"path":?"./node_modules/cz-customizable" ????} }
在根目錄創(chuàng)建的.cz-config.js, 自定義commit提示內(nèi)容
module.exports?=?{ ??types:?[ ????{?value:?'feat',?name:?'?feat:?????新功能'?}, ????{?value:?'fix',?name:?'?fix:??????修復(fù)'?}, ????{?value:?'docs',?name:?'??docs:?????文檔變更'?}, ????{?value:?'style',?name:?'?style:????代碼格式(不影響代碼運(yùn)行的變動(dòng))'?}, ????{ ??????value:?'refactor', ??????name:?'??refactor:?重構(gòu)(既不是增加feature,也不是修復(fù)bug)' ????}, ????{?value:?'perf',?name:?'??perf:?????性能優(yōu)化'?}, ????{?value:?'test',?name:?'?test:?????增加測(cè)試'?}, ????{?value:?'chore',?name:?'?chore:????構(gòu)建過程或輔助工具的變動(dòng)'?}, ????{?value:?'revert',?name:?'??revert:???回退'?}, ????{?value:?'build',?name:?'??build:????打包'?}, ????{?value:?'ci',?name:?'?CI:???related?changes'?} ??], ??//?override?the?messages,?defaults?are?as?follows ??messages:?{ ????type:?'請(qǐng)選擇提交類型(必選):', ????//?scope:?'請(qǐng)輸入文件修改范圍(可選):', ????customScope:?'請(qǐng)輸入修改范圍(可選):', ????subject:?'請(qǐng)簡要描述提交(必填):', ????//?body:?'請(qǐng)輸入詳細(xì)描述(可選,待優(yōu)化去除,跳過即可):', ????//?breaking:?'List?any?BREAKING?CHANGES?(optional):n', ????footer:?'請(qǐng)輸入要關(guān)閉的issue(待優(yōu)化去除,跳過即可):', ????confirmCommit:?'確認(rèn)使用以上信息提交?(y/n/e/h)' ??}, ??//?used?if?allowCustomScopes?is?true ??allowCustomScopes:?true, ??//?allowBreakingChanges:?['feat',?'fix'], ??skipQuestions:?['body',?'footer'], ??//?limit?subject?length,?commitlint默認(rèn)是72 ??subjectLimit:?72 }
當(dāng)我們提交代碼的時(shí)候,需要先git add .,然后執(zhí)行npm run commit,就可以根據(jù)響應(yīng)的提示填寫commit信息 了,如下圖所示:
(學(xué)習(xí)視頻分享:編程基礎(chǔ)視頻)