Git代碼提交規(guī)范

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插件

image.png

我的idea版本是2019.1.1,使用的是Git Commit Message Helper

image.png

二蛾洛、插件使用

在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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末酣藻,一起剝皮案震驚了整個(gè)濱河市曹洽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌辽剧,老刑警劉巖送淆,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異怕轿,居然都是意外死亡坊夫,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門撤卢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來环凿,“玉大人,你說我怎么就攤上這事放吩≈翘” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵渡紫,是天一觀的道長(zhǎng)到推。 經(jīng)常有香客問我,道長(zhǎng)惕澎,這世上最難降的妖魔是什么莉测? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮唧喉,結(jié)果婚禮上捣卤,老公的妹妹穿的比我還像新娘忍抽。我一直安慰自己,他們只是感情好董朝,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布鸠项。 她就那樣靜靜地躺著,像睡著了一般子姜。 火紅的嫁衣襯著肌膚如雪祟绊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天哥捕,我揣著相機(jī)與錄音牧抽,去河邊找鬼。 笑死遥赚,一個(gè)胖子當(dāng)著我的面吹牛阎姥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鸽捻,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼呼巴,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了御蒲?” 一聲冷哼從身側(cè)響起衣赶,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎厚满,沒想到半個(gè)月后府瞄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡碘箍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年遵馆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丰榴。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡货邓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出四濒,到底是詐尸還是另有隱情换况,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布盗蟆,位于F島的核電站戈二,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏喳资。R本人自食惡果不足惜觉吭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望仆邓。 院中可真熱鬧鲜滩,春花似錦伴鳖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽察署。三九已至闷游,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贴汪,已是汗流浹背脐往。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扳埂,地道東北人业簿。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像阳懂,于是被迫代替她去往敵國(guó)和親梅尤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355