Git代碼提交規(guī)范
前言
為什么要注重代碼提交規(guī)范?
在團(tuán)隊(duì)協(xié)作開發(fā)時(shí)膘融,每個(gè)人提交代碼時(shí)都會(huì)寫 commit message孩擂。
每個(gè)人都有自己的書寫風(fēng)格,翻看我們組的git log, 可以說是五花八門熟史,十分不利于閱讀和維護(hù)馁害。
一般來說,大廠都有一套的自己的提交規(guī)范蹂匹,尤其是在一些大型開源項(xiàng)目中碘菜,commit message 都是十分一致的。
因此限寞,我們需要制定統(tǒng)一標(biāo)準(zhǔn)炉媒,促使團(tuán)隊(duì)形成一致的代碼提交風(fēng)格,更好的提高工作效率昆烁,成為一名有追求的工程師吊骤。
一般項(xiàng)目開發(fā)都是多分支共存,master静尼、develop白粉、feature、hotfix鼠渺、release等分支鸭巴,如下圖所示,在這么多分支中拦盹,我們會(huì)有一個(gè)穩(wěn)定的master分支鹃祖,但是我們需要將分支代碼進(jìn)行merge。存在規(guī)范的commit message可以幫助我們很輕松的合并代碼以及發(fā)現(xiàn)問題普舆。例如使用Jenkins自動(dòng)化部署時(shí)恬口,我們可以根據(jù)jenkins拉取commit message中的Closes issues驗(yàn)證BUG等。
下面詳細(xì)講解Idea中如果進(jìn)行規(guī)范的提交Git Commit Message沼侣。
一祖能、安裝插件
idea版本是2019.3以上可以使用在開發(fā)工具idea中安裝Git Commit Message Plugins插件
我的idea版本是2019.1.1,使用的是Git Commit Message Helper
二蛾洛、插件使用
在Commit代碼處养铸,選擇使用Git Commit Message Plugins插件,如下圖所示,填寫項(xiàng)詳細(xì)含義請(qǐng)查看《插件詳解》
總共分為3大部分钞螟,Header兔甘, Body,F(xiàn)ooter詳細(xì)講解請(qǐng)看下節(jié)鳞滨。
三裂明、插件講解
主要分為下面三個(gè)部分: Header, Body太援,F(xiàn)ooter闽晦。
<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>
下面詳細(xì)解釋下個(gè)個(gè)部分的含義。
1提岔、Header
Header的部分只有一行,包括三個(gè)字段: type(必需), scope(可選), subject(必需)
對(duì)應(yīng)到idea插件上圖的配置分別為 Header部分的:
type(必需) | Type of change | commit類別 |
---|---|---|
scope(可選) | Scope of this change | commint影響的范圍 |
subject(必需)**** | Short description | 簡(jiǎn)短的描述 |
1.1 type
type用于說明 commit 的類別仙蛉,只允許使用下面標(biāo)識(shí)
- feat:新功能(feature)
- fix:修補(bǔ)bug
- docs:文檔(documentation)
- style: 格式(不影響代碼運(yùn)行的變動(dòng),空格,格式化,等等)
- refactor:重構(gòu)(即不是新增功能,也不是修改bug的代碼變動(dòng))
- perf: 性能 (提高代碼性能的改變)
- test:增加測(cè)試或者修改測(cè)試
- build: 影響構(gòu)建系統(tǒng)或外部依賴項(xiàng)的更改(maven,gradle,npm 等等)
- ci: 對(duì)CI配置文件和腳本的更改
- chore:對(duì)非 src 和 test 目錄的修改
- revert: Revert a commit
1.2 scope
scope
用于說明 commit 影響的范圍碱蒙,比如數(shù)據(jù)層荠瘪、控制層、視圖層等等赛惩,視項(xiàng)目不同而不同哀墓。
1.3 subject
subject
是 commit 目的的簡(jiǎn)短描述,不超過50個(gè)字符喷兼。
以動(dòng)詞開頭篮绰,使用第一人稱現(xiàn)在時(shí),比如change季惯,而不是changed或changes
第一個(gè)字母小寫
結(jié)尾不加句號(hào)(.)
2吠各、Body
Body 部分是對(duì)本次 commit 的詳細(xì)描述,可以分成多行勉抓。下面是一個(gè)范例贾漏。
如有必要,更詳細(xì)的說明文本藕筋。包裝它
大概72個(gè)字左右纵散。
后面的段落在空行之后。
-要點(diǎn)也可以
-使用懸掛縮進(jìn)
有一個(gè)注意點(diǎn)隐圾。
(1)應(yīng)該說明代碼變動(dòng)的動(dòng)機(jī)伍掀,以及與以前行為的對(duì)比。
3翎承、Footer
Footer 部分只用于兩種情況硕盹。
(1)不兼容變動(dòng)
如果當(dāng)前代碼與上一個(gè)版本不兼容符匾,則 Footer 部分以BREAKING CHANGE
開頭叨咖,后面是對(duì)變動(dòng)的描述、以及變動(dòng)理由和遷移方法。
(2)關(guān)閉 Issue
如果當(dāng)前 commit 針對(duì)某個(gè)issue甸各,那么可以在 Footer 部分關(guān)閉這個(gè) issue 垛贤。
Closes #234
也可以一次關(guān)閉多個(gè) issue 。
Closes #123, #245, #992
最后, 一個(gè)完整的commit message示例可能如下:
四趣倾、git hooks校驗(yàn)
由于使用idea插件只防君子聘惦,不防小人
。Git Commit Message Plugins只能起到模板的作用儒恋,開發(fā)人員如果誤操作或者忘記使用任提交不規(guī)范的Commit Message善绎。因此使用git hooks強(qiáng)制開發(fā)人員使用以上格式提交。具體操作如下:
在項(xiàng)目目錄.git/hooks
目錄下有很多鉤子诫尽,我們可以根據(jù)需要自定義不同的內(nèi)容禀酱,這里我們只需要修改commit-msg
即可。
首先將commit-msg.sample
改為 commit-msg
牧嫉,也就是去掉后綴剂跟。將里面的內(nèi)容修改為下面內(nèi)容。
#!/bin/sh
MSG=`awk '{printf("%s",$0)}' $1`
if [[ $MSG =~ ^(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)\(.*\):.*$ ]]
then
echo -e "\033[32m commit success! \033[0m"
else
echo -e "\033[31m Error: the commit message is irregular \033[m"
echo -e "\033[31m Error: type must be one of [feat,fix,docs,style,refactor,perf,test,build,ci,chore,revert] \033[m"
echo -e "\033[31m eg: feat(user): add the user login \033[m"
exit 1
fi