【推薦】git commit 規(guī)范和如何在 commit 里使用 emoji
前言
今天給大家?guī)淼氖顷P(guān)于 git commit 那些事兒,希望大家喜歡。
對于規(guī)范 git commit message 我是分成了兩種類型去看待。
對于通用庫、開源項目這類多人維護,而且極大可能別人會來看這份代碼的,一定要規(guī)范,特別是對于開源項目,往往會要列 Change Log,規(guī)范好 commit 節(jié)省自己整理 log 的時間,也方便了用戶。
對于業(yè)務(wù)代碼,特別是那種一個人維護的,其實不搞問題也不大,因為極小可能會有人來看你的 commit message。但是我依然還是建議規(guī)范一下,不然一旦后面想去看就會花費很多的力氣,畢竟規(guī)范一下也不麻煩。
通過本篇文章你將了解到三部分內(nèi)容:
了解 git commit 規(guī)范 學到用工具 Commitizen 來規(guī)范 commit 學到如何在 commit message 里加上好看的 emoji
規(guī)范
現(xiàn)在主流的 commit message 規(guī)范就是 Angular 團隊所用的準則[1],繼而衍生了 Conventional Commits specification[2]. 很多工具也是基于此規(guī)范。
每次提交,Commit message 都包括三個部分:header,body 和 footer,其中 header 有一個特殊的格式,包括了 type、scope、subject。
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
其中 header 是必選的,但是 header 里的 scope 是可選的,另外提交的 message 長度不要超過 100 個字符,太長了不易閱讀。
對于我個人來說,我覺得只要把 header 部分規(guī)范其實基本能滿足絕大部分需要了,強制去規(guī)范 body 和 footer 對于團隊的同學來說簡直是折磨,所以我這里僅介紹 header 的幾部分
type
type 指明 git commit 的類別,應(yīng)該使用以下類型
『feat』: 新增功能 『fix』: 修復(fù) bug 『docs』: 僅僅修改了文檔,比如 README, CHANGELOG 等等 『test』: 增加/修改測試用例,包括單元測試、集成測試等 『style』: 修改了空行、縮進格式、引用包排序等等(不改變代碼邏輯) 『perf』: 優(yōu)化相關(guān)內(nèi)容,比如提升性能、體驗、算法等 『refactor』: 代碼重構(gòu),「沒有新功能或者 bug 修復(fù)」 『chore』: 改變構(gòu)建流程、或者增加依賴庫、工具等 『revert』: 回滾到上一個版本 『merge』: 代碼合并
“這里面有些 angular 團隊沒有,自己可以自行增減
”
scope(可選)
scope 用于說明 commit 影響的范圍,根據(jù)不同項目有不同層次描述。若沒有特殊規(guī)定,也可以描述影響的哪些功能等。
subject
subject 是 commit 目的的簡短描述,不超過 50/80 個字符,一般 git 提交的時候會有顏色提示。
若英文用不慣,那么推薦使用中文 若是開源代碼,一律推薦統(tǒng)一英文,英文不行可以翻譯軟件用起來 若是開源代碼,可以再附加對應(yīng)的 issue 地址 結(jié)尾不加標點符號
工具:Commitizen
Commitizen 是一個撰寫合格 Commit message 的工具,(詳細說明見 github 地址[3]),用于代替 git commit 指令,而 cz-conventional-changelog 適配器提供 conventional-changelog 標準(約定式提交標準)?;诓煌枨?,也可以使用不同適配器。
1. 全局安裝 commitizen cz-conventional-changelog
npm install -g commitizen cz-conventional-changelog
2. git cz 取代 git commit
安裝完畢后,可直接使用 git cz 來取代 git commit。
可以看到當你 cz 之后,下面有很多的 type 讓你選擇,這就省掉了每次你去想應(yīng)該用哪種 type,非常方便。
“全局模式下,需要
”~/.czrc配置文件, 為 commitizen 指定 Adapter, 如果你不需要生成 Change Log 可以不用去處理。
只要用了 Commitizen ,就很方便的就規(guī)范的大家的 message 。
在 commit message 里用 emoji
在 git commit 上使用 emoji 提供了一種簡單的方法,僅通過查看所使用的表情符號來確定提交的目的或意圖, 提交記錄非常好理解,閱讀體驗非常棒。
使用方法
git commit 時直接在注釋中寫入表情符號的代碼部分即可完成表情 emoji 的提交。
舉個栗子:
$ git commit -m ':tada: init commit'
$ git commit -m 'added image to repo :art:'
“如果你用 Commitizen,可能不太好把 emoji 放在最前面,因為咱們操作的空間,就在 git cz 后第三次交互提示,也就是在輸入 header 的 subject 的時候填入,如果是這樣,可以選擇把表情放到最后。
”
效果展示:
如果你們團隊是一個喜歡用 emoji 的團隊,其實可以不用遵循上面的一節(jié)的規(guī)范,因為 emoji 已經(jīng)可以表達出 header 的 type 的作用了,直接在 emoji 后面加描述即可。
emoji 表情庫
| emoji | emoji 代碼 | commit 說明 |
|---|---|---|
| :tada: (慶祝) | :tada: | 初次提交 |
| :new: (全新) | :new: | 引入新功能 |
| :bookmark: (書簽) | :bookmark: | 發(fā)行/版本標簽 |
| :bug: (bug) | :bug: | 修復(fù) bug |
| :ambulance: (急救車) | :ambulance: | 重要補丁 |
| :globe_with_meridians: (地球) | :globe_with_meridians: | 國際化與本地化 |
| :lipstick: (口紅) | :lipstick: | 更新 UI 和樣式文件 |
| :clapper: (場記板) | :clapper: | 更新演示/示例 |
| :rotating_light: (警車燈) | :rotating_light: | 移除 linter 警告 |
| :wrench: (扳手) | :wrench: | 修改配置文件 |
| :heavy_plus_sign: (加號) | :heavy_plus_sign: | 增加一個依賴 |
| :heavy_minus_sign: (減號) | :heavy_minus_sign: | 減少一個依賴 |
| :arrow_up: (上升箭頭) | :arrow_up: | 升級依賴 |
| :arrow_down: (下降箭頭) | :arrow_down: | 降級依賴 |
| :zap: (閃電) :racehorse: (賽馬) | :zap::racehorse: | 提升性能 |
| :chart_with_upwards_trend: (上升趨勢圖) | :chart_with_upwards_trend: | 添加分析或跟蹤代碼 |
| :rocket: (火箭) | :rocket: | 部署功能 |
| :white_check_mark: (白色復(fù)選框) | :white_check_mark: | 增加測試 |
| :memo: (備忘錄) :book: (書) | :memo::book: | 撰寫文檔 |
| :hammer: (錘子) | :hammer: | 重大重構(gòu) |
| :art: (調(diào)色板) | :art: | 改進代碼結(jié)構(gòu)/代碼格式 |
| :fire: (火焰) | :fire: | 移除代碼或文件 |
| :pencil2: (鉛筆) | :pencil2: | 修復(fù) typo |
| :construction: (施工) | :construction: | 工作進行中 |
| :wastebasket: (垃圾桶) | :wastebasket: | 廢棄或刪除 |
| :wheelchair: (輪椅) | :wheelchair: | 可訪問性 |
| :construction_worker: (工人) | :construction_worker: | 添加 CI 構(gòu)建系統(tǒng) |
| :green_heart: (綠心) | :green_heart: | 修復(fù) CI 構(gòu)建問題 |
| :lock: (鎖) | :lock: | 修復(fù)安全問題 |
| :whale: (鯨魚) | :whale: | Docker 相關(guān)工作 |
| :apple: (蘋果) | :apple: | 修復(fù) macOS 下的問題 |
| :penguin: (企鵝) | :penguin: | 修復(fù) Linux 下的問題 |
| :checkered_flag: (旗幟) | :checkered_flag: | 修復(fù) Windows 下的問題 |
| :twisted_rightwards_arrows: (交叉箭頭) | :twisted_rightwards_arrows: | 分支合并 |
如何在命令行中顯示 emoji
默認情況下,在命令行中并不會顯示出 emoji, 僅顯示 emoji 代碼。不過可以使用 emojify 使得在命令行也可顯示 emoji, 它是一個 shell 腳本,安裝與使用都很簡單,在這里[4] 查看更詳細的如何安裝與使用。
安裝 emojify
$ sudo sh -c "curl https://raw.githubusercontent.com/mrowa44/emojify/master/emojify -o /usr/local/bin/emojify && chmod +x /usr/local/bin/emojify"
使用 emojify
$ emojify "Hey, I just :raising_hand: you, and this is :scream: , but here's my :calling: , so :telephone_receiver: me, maybe?"
顯示效果:
在使用 git bash 的時候,設(shè)置替換日志中的表情符號代碼
$ git log --oneline --color | emojify | less -r
或者設(shè)置 git log 命令別名
$ alias gitlog='git log --oneline --color | emojify | less -r'
$ gitlog
效果如下:
是不是很好玩,快去試試吧!
參考資料
git-emoji-guide[5] git commit 時使用 Emoji ?[6]
參考資料
Angular 團隊所用的準則: https://github.com/angular/angular.js/blob/master/DEVELOPERS.md#-git-commit-guidelines
[2]Conventional Commits specification: https://link.zhihu.com/?target=https%3A//conventionalcommits.org/
[3]見 github 地址: https://github.com/commitizen/cz-cli
[4]這里: https://github.com/mrowa44/emojify
[5]git-emoji-guide: https://hooj0.github.io/git-emoji-guide/
[6]git commit 時使用 Emoji ?: https://zhuanlan.zhihu.com/p/29764863


