規範 git commit 格式

原文地址: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 <[email protected]>
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影響的範圍,即簡要說明修改會涉及的部分,比如數據層、控制層、視圖層等,
  • subjectcomment所在的位置,這次提交的簡短描述

1.2 Body 是對本次 commit 的詳細描述,可以分成多行

1.3 Footer 部分只用於兩種情況

  • 不兼容變動

如果當前代碼與上一個版本不兼容,則 Footer 部分以BREAKING CHANGE開頭,後面是對變動的描述、以及變動理由和遷移方法

  • 關閉 Issue

如果當前 commit 針對某個issue,那麼可以在 Footer 部分關閉這個 issue (可依次關閉過個issueCloses #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.

  1. 全局安裝commitizennode模塊
npm install -g commitizen
  1. 在項目目錄下運行命令
    如果你的項目不是node項目,下面的內容可以直接忽略,請直接翻到 一級標題3
commitizen init cz-conventional-changelog --save --save-exact
  1. 此時可能會報找不到package.json的錯誤,使用下面命令來自動生成一個項目的package,然後在運行2中的命令.
npm init --yes

運行完以上一律使用git cz 代替git commit來提交代碼,同時會顯示一下選項來自動生成符合格式的commit message.

PS ~/git> git cz
[email protected], [email protected]


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

  1. 現在項目中可能多出來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 給出的詳細信息

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章