原文地址:https://www.jianshu.com/p/36d970a2b4da
安裝 commitizen 插件來實現
[TOP]
最近在學習規范使用git開發,發現一個比較好用的來規范comment的工具,記錄一下,一般來說,commit message 應該清晰明了,說明本次提交的目的,所以需要一些規范來使這些comment變得可讀.commitizen則是最近發現的一款比較易用的工具
git的提交使用git commit -m "hello world"
來提交comment,但是一些像hello world這樣沒有意義的comment讓人無法理解這次的提交到底是為了什么
下面是一些基礎介紹如果覺得麻煩直接查看第二部分
1. commit message format(信息域)
commit message一般分為三個部分Header,Body 和 Footer
<type>(<scope>): <subject> // 空一行 <body> // 空一行 <footer> 其中,Header 是必需的,Body 和 Footer 可以省略 Example: PS D:\git\pythonPractice> git log commit 58a7a966acb9aa2fffc0e02c9ce3be64b8949991 (HEAD -> master) Author: Zhiwei Tian <hebeitianzhiwei@outlook.com> Date: Fri Aug 17 17:38:36 2018 +0800 feat(serve): add grpc server
1.1 HEAD
type
用於說明commit
的類別,只允許使用下面7個標識
feat:新功能(feature)
fix:修補bug
docs:文檔(documentation)
style: 格式(不影響代碼運行的變動)
refactor:重構(即不是新增功能,也不是修改bug的代碼變動)
test:增加測試
chore:構建過程或輔助工具的變動
scope
用來說明本次Commit影響的范圍,即簡要說明修改會涉及的部分,比如數據層、控制層、視圖層等,subject
comment所在的位置,這次提交的簡短描述
1.2 Body 是對本次 commit 的詳細描述,可以分成多行
1.3 Footer 部分只用於兩種情況
- 不兼容變動
如果當前代碼與上一個版本不兼容,則
Footer
部分以BREAKING CHANGE
開頭,后面是對變動的描述、以及變動理由和遷移方法
- 關閉 Issue
如果當前 commit 針對某個issue,那么可以在 Footer 部分關閉這個 issue (可依次關閉過個issue
Closes #123, #245, #992
)
1.4 Revert
還有一種特殊情況,如果當前 commit 用於撤銷以前的 commit,則必須以revert:開頭,后面跟着被撤銷 Commit 的 Header
revert: type(scope): some comment
This reverts commit bfe307ce57d87677c6c473c228e6c2ed8b81dcec.
Body部分的格式是固定的,必須寫成This reverts commit <hash>.
,其中的hash是被撤銷 commit 的 HSHA
標識符。
如果當前 commit 與被撤銷的 commit,在同一個發布(release)里面,那么它們都不會出現在 Change log 里面。如果兩者在不同的發布,那么當前 commit,會出現在 Change log 的Reverts小標題下面
2. 使用commitizen來執行規范
前提需要安裝node(官網下載地址)
如果看到 EACCES
錯誤, 請閱讀 fixing npm permissions 獲取幫助)
以下操作均參考cz-cli倉庫所給出的指導,需要獲取更加詳細的信息請前往cz-cli.
- 全局安裝
commitizen
node模塊
npm install -g commitizen
- 在項目目錄下運行命令
如果你的項目不是node
項目,下面的內容可以直接忽略,請直接翻到一級標題3
commitizen init cz-conventional-changelog --save --save-exact
- 此時可能會報找不到
package.json
的錯誤,使用下面命令來自動生成一個項目的package,然后在運行2中的命令.
npm init --yes
運行完以上一律使用git cz
代替git commit
來提交代碼,同時會顯示一下選項來自動生成符合格式的commit message.
PS ~/git> git cz
cz-cli@2.10.1, cz-conventional-changelog@2.1.0
Line 1 will be cropped at 100 characters. All other lines will be wrapped after 100 characters.
? Select the type of change that you're committing: (Use arrow keys)
> feat: A new feature
fix: A bug fix
docs: Documentation only changes
style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
refactor: A code change that neither fixes a bug nor adds a feature
perf: A code change that improves performance
test: Adding missing tests or correcting existing tests
(Move up and down to reveal more choices)
按照提示,你可以寫出規范的message了
idea有插件可以使用git commit template(可能需要科~學
上網)
commitizen同時可以檢查commit message是否符合格式.
生成change log,還又一些高級用法比如ghooks
這里就不細說了.詳細請查看參考鏈接和validate-commit-msg
- 現在項目中可能多出來
dir:node_nodules, file:package.json, package-lock.json
這些目錄和文件,這是node安裝模塊產生的,如果不是node項目都可以忽略掉,熟悉node的同學肯定都知道哪些是有用的了.
3. 在非node項目中,優雅的使用git-cz
此處可接2.1
上下文,安裝git-cz
npm install -g commitizen git-cz
使用git-cz
這個adapter
還可以自定義一些內容,默認也會附帶一些表情,如下圖
詳細的設置操作請參考倉庫 git-cz 給出的詳細信息
