git commit 規(guī)范

使用angular + commitizen + cz-conventional-changelog 來規(guī)范git commit

目的

  • 統(tǒng)一團隊Git commit日志標(biāo)準(zhǔn)诽嘉,便于后續(xù)代碼review秽晚,版本發(fā)布以及日志自動化生成等等偎窘。
  • 統(tǒng)一團隊的Git工作流毡惜,包括分支使用昼牛、tag規(guī)范祈噪、issue等

Git commit日志參考案例


參考鏈接:

總體方案

image

Git commit日志基本規(guī)范

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

對格式的說明如下:

  • type代表某次提交的類型粥鞋,比如是修復(fù)一個bug還是增加一個新的feature。所有的type類型如下:
  • feat: 新增feature
  • fix: 修復(fù)bug
  • docs: 僅僅修改了文檔裕膀,比如README, CHANGELOG, CONTRIBUTE等等
  • style: 僅僅修改了空格员串、格式縮進、都好等等昼扛,不改變代碼邏輯
  • refactor: 代碼重構(gòu)寸齐,沒有加新功能或者修復(fù)bug
  • perf: 優(yōu)化相關(guān),比如提升性能抄谐、體驗
  • test: 測試用例渺鹦,包括單元測試、集成測試等
  • chore: 改變構(gòu)建流程斯稳、或者增加依賴庫、工具等
  • revert: 回滾到上一個版本

格式要求:

# 標(biāo)題行:50個字符以內(nèi)迹恐,描述主要變更內(nèi)容
#
# 主體內(nèi)容:更詳細(xì)的說明文本挣惰,建議72個字符以內(nèi)。 需要描述的信息包括:
#
# * 為什么這個變更是必須的? 它可能是用來修復(fù)一個bug殴边,增加一個feature憎茂,提升性能、可靠性锤岸、穩(wěn)定性等等
# * 他如何解決這個問題? 具體描述解決問題的步驟
# * 是否存在副作用竖幔、風(fēng)險? 
#
# 尾部:如果需要的化可以添加一個鏈接到issue地址或者其它文檔,或者關(guān)閉某個issue是偷。

Git分支與版本發(fā)布規(guī)范

  • 基本原則:master為保護分支拳氢,不直接在master上進行代碼修改和提交募逞。
  • 開發(fā)日常需求或者項目時,從master分支上checkout一個feature分支進行開發(fā)或者bugfix分支進行bug修復(fù)馋评,功能測試完畢并且項目發(fā)布上線后放接,將feature分支合并到主干master,并且打Tag發(fā)布留特,最后刪除開發(fā)分支纠脾。分支命名規(guī)范:
    • 分支版本命名規(guī)則:分支類型 _ 分支發(fā)布時間 _ 分支功能。比如:feature_20170401_fairy_flower
    • 分支類型包括:feature蜕青、 bugfix苟蹈、refactor三種類型,即新功能開發(fā)右核、bug修復(fù)和代碼重構(gòu)
    • 時間使用年月日進行命名慧脱,不足2位補0
    • 分支功能命名使用snake case命名法,即下劃線命名蒙兰。
  • Tag包括3位版本磷瘤,前綴使用v。比如v1.2.31搜变。Tag命名規(guī)范:
    • 新功能開發(fā)使用第2位版本號采缚,bug修復(fù)使用第3位版本號
    • 核心基礎(chǔ)庫或者Node中間價可以在大版本發(fā)布請使用灰度版本號,在版本后面加上后綴挠他,用中劃線分隔扳抽。alpha或者belta后面加上次數(shù),即第幾次alpha:
      • v2.0.0-alpha-1
      • v2.0.0-belta-1
  • 版本正式發(fā)布前需要生成changelog文檔殖侵,然后再發(fā)布上線贸呢。

如何接入?

接入?yún)⒖?a target="_blank" rel="nofollow">commit-message-test-project項目拢军。具體步驟如下:

  • 第一步:在工程跟目錄下的package.json文件加入如下代碼所示的scripts和dependencies內(nèi)容楞陷,版本號為3位版本號。
 {
    "name": "application-name",
    "version": "0.1.0",
    "scripts": {
      "commitmsg": "validate-commit-msg",
      "commit": "git-cz ",
      "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0"
    },
    "devDependencies": {
      "commitizen": "^2.3.0",
      "validate-commit-msg": "^2.11.1",
      "conventional-changelog-cli": "^1.2.0",
      "husky": "^0.13.1"
    }
 }
  • 第二步:在工程根目錄新建.vcmrc文件茉唉,并且文件內(nèi)容為
{
  "helpMessage": "\nPlease fix your commit message (and consider using https://www.npmjs.com/package/commitizen)\n",
  "types": [
    "feat",
    "fix",
    "docs",
    "style",
    "refactor",
    "perf",
    "test",
    "chore",
    "revert"
  ],
  "warnOnFail": false,
  "autoFix": false
}

接入后的Git commit操作流程

  • 第一步:創(chuàng)建一個feature分支或者bugfix分支
  $ git checkout -b feature_infinite_load    # 切換到一個feature分支或者bug fix分支
  • 第二步:將代碼提交到本地Git倉庫固蛾,并填寫符合要求的Commit message格式
  $ git add .                                
  $ git commit                               # 此處不要加任何參數(shù),比如-m

如下圖所示:

image
  • 第三步:將代碼同步到遠(yuǎn)程Git倉庫
  $ git push origin feature_infinite_load    # 將修改發(fā)布到遠(yuǎn)程倉庫 
  • 第四步:自動生成changelog度陆,并打Tag發(fā)布
  $ npm run changelog                    # 使用npm script中的changlog命令直接從git元數(shù)據(jù)生成日志艾凯。
  $ git tag v0.1.0
  $ git push origin v0.1.0

安裝commitizen + cz-conventional-changelog

npm install -g commitizen
npm install -g cz-conventional-changelog

使用命令 git cz 替代 git commit,出現(xiàn)angular規(guī)范選擇懂傀,如圖:
[圖片上傳失敗...(image-c98018-1527586920607)]

生成輸出文檔使用命令:

npm run changelog

在當(dāng)前項目目錄中生成 CHANGELOG.md 文件趾诗,效果如圖:

changelog.jpg
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蹬蚁,隨后出現(xiàn)的幾起案子恃泪,更是在濱河造成了極大的恐慌郑兴,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,207評論 6 521
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悟泵,死亡現(xiàn)場離奇詭異杈笔,居然都是意外死亡,警方通過查閱死者的電腦和手機糕非,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,455評論 3 400
  • 文/潘曉璐 我一進店門蒙具,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人朽肥,你說我怎么就攤上這事禁筏。” “怎么了衡招?”我有些...
    開封第一講書人閱讀 170,031評論 0 366
  • 文/不壞的土叔 我叫張陵篱昔,是天一觀的道長。 經(jīng)常有香客問我始腾,道長州刽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,334評論 1 300
  • 正文 為了忘掉前任浪箭,我火速辦了婚禮穗椅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘奶栖。我一直安慰自己匹表,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,322評論 6 398
  • 文/花漫 我一把揭開白布宣鄙。 她就那樣靜靜地躺著袍镀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪冻晤。 梳的紋絲不亂的頭發(fā)上苇羡,一...
    開封第一講書人閱讀 52,895評論 1 314
  • 那天,我揣著相機與錄音鼻弧,去河邊找鬼设江。 笑死,一個胖子當(dāng)著我的面吹牛温数,可吹牛的內(nèi)容都是我干的绣硝。 我是一名探鬼主播蜻势,決...
    沈念sama閱讀 41,300評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼撑刺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了握玛?” 一聲冷哼從身側(cè)響起够傍,我...
    開封第一講書人閱讀 40,264評論 0 277
  • 序言:老撾萬榮一對情侶失蹤甫菠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后冕屯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寂诱,經(jīng)...
    沈念sama閱讀 46,784評論 1 321
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,870評論 3 343
  • 正文 我和宋清朗相戀三年安聘,在試婚紗的時候發(fā)現(xiàn)自己被綠了痰洒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,989評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡浴韭,死狀恐怖丘喻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情念颈,我是刑警寧澤泉粉,帶...
    沈念sama閱讀 36,649評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站榴芳,受9級特大地震影響嗡靡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜窟感,卻給世界環(huán)境...
    茶點故事閱讀 42,331評論 3 336
  • 文/蒙蒙 一讨彼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧肌括,春花似錦点骑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,814評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至紧索,卻和暖如春袁辈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背珠漂。 一陣腳步聲響...
    開封第一講書人閱讀 33,940評論 1 275
  • 我被黑心中介騙來泰國打工晚缩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人媳危。 一個月前我還...
    沈念sama閱讀 49,452評論 3 379
  • 正文 我出身青樓荞彼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親待笑。 傳聞我的和親對象是個殘疾皇子鸣皂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,995評論 2 361

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