Commit Message & Change Log

每一次commit是階段性的Ending隧膏,應(yīng)記錄著這一階段所完成的事以及關(guān)注點(diǎn),盡可能詳細(xì)具體赞咙。

Angular Commit Message

注:如果可以的話饵隙,提交信息應(yīng)通過(guò) E-mail 發(fā)送給工程師和其它關(guān)注項(xiàng)目的人。

Commit Message格式化

每個(gè)commit message應(yīng)該包含一個(gè)header歌粥、一個(gè)body和一個(gè)footer塌忽;header有一個(gè)特殊的格式,包含type(類(lèi)型)失驶、scope(作用域)和subject(主題):

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

header是必須有的土居,但是其scope是可選的。

注意:commit message的任何行不能超過(guò)100個(gè)字符嬉探,方便閱讀擦耀。
樣例:

docs(changelog): update change log to beta.5

上圖 Angular Commit Message 就是很好的范例。

Type

提交類(lèi)型涩堤,必須是下列之一:

  • build:影響構(gòu)建系統(tǒng)或外部依賴(lài)的改變
  • ci:改變CI配置文件和腳本
  • docs:只改變文檔
  • feat:一個(gè)新功能
  • fix:一個(gè)bug fix
  • perf:代碼更改,提高了性能
  • refactor:代碼重構(gòu)
  • style:不影響代碼含義埂奈,只是代碼風(fēng)格的改變
  • test:添加缺失的測(cè)試或修正現(xiàn)有的測(cè)試
  • wip:移除文件或者代碼

Scope

scope應(yīng)該是被影響的包的名稱(chēng),這樣能方便閱讀根據(jù)提交信息生成的更新日志定躏。
比如账磺,工具類(lèi)的包名為Tools芹敌,本次提交為工具類(lèi)里的修改,那么scope就為T(mén)ools:

feat(Tools): add a data utils

具體的scope根據(jù)項(xiàng)目中各模塊的包名而定垮抗。

subject

subject是 commit 目的的簡(jiǎn)短描述:

  • 以動(dòng)詞開(kāi)頭氏捞,使用第一人稱(chēng)現(xiàn)在時(shí),比如change冒版,而不是changed或changes
  • 第一個(gè)字母小寫(xiě)
  • 結(jié)尾不加句號(hào)(.)

Body

Body 部分是對(duì)本次 commit 的詳細(xì)描述液茎,可以分成多行。
注意:

  • 使用第一人稱(chēng)現(xiàn)在時(shí)辞嗡,比如使用change而不是changed或changes捆等。
  • 應(yīng)該說(shuō)明代碼變動(dòng)的動(dòng)機(jī),以及與以前行為的對(duì)比续室。

Footer

Footer分兩種情況:

  • 不兼容變動(dòng):如果當(dāng)前代碼與上一個(gè)版本不兼容栋烤,則 Footer 部分以BREAKING CHANGE開(kāi)頭,后面是對(duì)變動(dòng)的描述挺狰、以及變動(dòng)理由和遷移方法明郭。
  • 關(guān)閉 Issue:如果當(dāng)前 commit 針對(duì)某個(gè)issue,那么可以在 Footer 部分關(guān)閉這個(gè) issue 丰泊。

Revert

還有一種特殊情況薯定,如果當(dāng)前 commit 用于撤銷(xiāo)以前的 commit,則必須以revert:開(kāi)頭瞳购,后面跟著被撤銷(xiāo) Commit 的 Header话侄。

revert: feat(pencil): add 'graphiteWidth' option

This reverts commit 667ecc1654a317a13331b17617d973392f415f02.

Body部分的格式是固定的,必須寫(xiě)成This reverts commit <hash>.学赛,其中的hash是被撤銷(xiāo) commit 的 SHA 標(biāo)識(shí)符满葛。

NPM

npm是隨同Node.js一起安裝的包管理工具,后面介紹的工具Commitizen罢屈、conventional-changelog都要使用npm來(lái)安裝嘀韧。

既然是Node.js的包管理工具,那么首先就要下載Node.js缠捌,通過(guò)Node.js下載地址下載安裝Node.js锄贷。

然后安裝npm:

curl -L https://www.npmjs.com/install.sh | sh 

Commitizen

Commitizen是一個(gè)格式化commit message的工具。

通過(guò)上面安裝好的npm來(lái)安裝:

npm install -g commitizen

而我們用的是Angular的commit message規(guī)范曼月,那么就在我們項(xiàng)目的目錄下輸入以下命令:

commitizen init cz-conventional-changelog --save --save-exact

但是注意谊却,因?yàn)閏ommitizen工具是基于Node.js的,而我們iOS項(xiàng)目工程目錄下是沒(méi)有package.json文件哑芹,所以會(huì)報(bào)錯(cuò):

Error: ENOENT: no such file or directory, open '/Users/***/package.json

關(guān)于這個(gè)問(wèn)題炎辨,可以參考這個(gè)commitizen的issue:Usage in non-node projects?,對(duì)于非Node的項(xiàng)目聪姿,我們可先在我們項(xiàng)目中添加一個(gè)空的package.json文件碴萧,然后再輸入命令:

npm init --yes

先初始化配置package.json文件乙嘀,然后再輸入命令:

commitizen init cz-conventional-changelog --save --save-exact

看到以下信息,且沒(méi)有報(bào)錯(cuò)表示成功:

這樣當(dāng)我們提交的時(shí)候破喻,就用git cz替換git commit命令虎谢,會(huì)出現(xiàn)提交類(lèi)型的選擇:


然后根據(jù)提示選擇、輸入就是了曹质。

注意如果是第二次配置婴噩,需要用--force

commitizen init cz-conventional-changelog --save --force

生成CHANGELOG

conventional-changelog就是生成 Change log 的工具。

運(yùn)行下列命令:

$ npm install -g conventional-changelog
$ cd my-project
$ conventional-changelog -p angular -i CHANGELOG.md -w

但是最后出現(xiàn)command not found羽德,以為是conventional-changelog沒(méi)有安裝几莽,通過(guò)命令:

npm ls -g -depth=0

打印出:

/usr/local/lib
├── commitizen@2.9.6
├── conventional-changelog@1.1.0
├── cz-conventional-changelog@2.0.0
└── npm@4.3.0

明明是有的,苦思不得其解宅静,最后在這篇文章Git 提交記錄和分支模型中發(fā)現(xiàn)Commitizen就依據(jù)conventional message章蚣,創(chuàng)建起一個(gè)生態(tài):

于是就改用了conventional-changelog-cli

$ npm install -g conventional-changelog-cli
$ cd my-project
$ conventional-changelog -p angular -i CHANGELOG.md -s

通過(guò)以上命令你就會(huì)發(fā)現(xiàn)在項(xiàng)目中多了個(gè)CHANGELOG.md文件,表示生成 Change log成功了坏为。

參考鏈接:

Commit message 和 Change log 編寫(xiě)指南
Git Commit Message Conventions
Angular的 Commit Message Guidelines
Angular的commit message
Git 寫(xiě)出好的 commit message

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市镊绪,隨后出現(xiàn)的幾起案子匀伏,更是在濱河造成了極大的恐慌,老刑警劉巖蝴韭,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件够颠,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡榄鉴,警方通過(guò)查閱死者的電腦和手機(jī)履磨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)庆尘,“玉大人剃诅,你說(shuō)我怎么就攤上這事∈患桑” “怎么了矛辕?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)付魔。 經(jīng)常有香客問(wèn)我聊品,道長(zhǎng),這世上最難降的妖魔是什么几苍? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任翻屈,我火速辦了婚禮,結(jié)果婚禮上妻坝,老公的妹妹穿的比我還像新娘伸眶。我一直安慰自己惊窖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布赚抡。 她就那樣靜靜地躺著爬坑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪涂臣。 梳的紋絲不亂的頭發(fā)上盾计,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音赁遗,去河邊找鬼署辉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛岩四,可吹牛的內(nèi)容都是我干的哭尝。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼剖煌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼材鹦!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起耕姊,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤桶唐,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后茉兰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體尤泽,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年规脸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了坯约。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡莫鸭,死狀恐怖闹丐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情被因,我是刑警寧澤妇智,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站氏身,受9級(jí)特大地震影響巍棱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蛋欣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一航徙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧陷虎,春花似錦到踏、人聲如沸杠袱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)楣富。三九已至,卻和暖如春伴榔,著一層夾襖步出監(jiān)牢的瞬間纹蝴,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工踪少, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留塘安,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓援奢,卻偏偏與公主長(zhǎng)得像兼犯,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子集漾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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