如何優雅的管理你的commit?

如何優雅的管理你的commit

咱們有的時候去接盤別人的代碼或者是團隊協做的時候,有時候會根據同伴或者前者的commit來分析當次代碼所產生的side effect。咱們指望的是分明的、一眼能夠抓住重點的commit信息,可是咱們卻常常會看到testfix bugs....等等這樣的信息。emmmmmm~~ 有的時候會無從下手,須要仔細看看這些代碼究竟進行了一些什麼樣的改動。然而這種時候每每會因爲後者不知道前者代碼的結構而致使以前解決的bug或者實現的feature被後者覆蓋或者是再現。
固然,上面的這些狀況是咱們不但願出現的。爲了不這些狀況,咱們須要分明的、清晰的、有結構的、語義化的、約定式的commit方式。
如今比較流行的是:jquery

  • commitizen: Angluar團隊的提交代碼方式,後來被你們普遍的應用。
  • git template: 自定義git模版,這樣的須要團隊來制定一套你們都承認的提交模版,而後你們按照這套模版來進行提交。

commitizen

介紹

We have very precise rules over how our git commit messages can be formatted. This leads to more readable messages that are easy to follow when looking through the project history. But also, we use the git commit messages to generate the AngularJS change log.webpack

上面的用渣渣翻譯器翻譯爲:git

對於如何格式化git提交消息,咱們有很是精確的規則。這將致使在查看項目歷史時更易於遵循的可讀消息。此外,咱們使用git提交消息來生成AngularJS更改日誌。web

安裝

# 全局安裝commitizen
npm install -g commitizen
# 全局安裝模版
npm install -g cz-conventional-changelog 
# for macos
echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc
# for anySysterm 手動建立.czrc,添加如下內容
{ "path": "cz-conventional-changelog" }
# 轉到你的project下
cd your project
# 項目內安裝
commitizen init cz-conventional-changelog --save --save-exact
# 運行以上命令以後會在package.json中生成下面內容
"config": {
  "commitizen": {
    "path": "cz-conventional-changelog"
  }
}
複製代碼

這裏,就簡單的配置了commitizen在咱們的環境中了。咱們只須要在每次執行git commit的時候替換爲git cz便可,就會看到一下內容:
express

commond line

提交類型

  • feat: 新功能
  • fix: 修復bug
  • doc: 文檔改變
  • style: 代碼格式變動
  • refactor: 某個已有功能重構
  • perf: 性能優化
  • test: 增長測試
  • build: 改變build工具,好比webpack變成grunt
  • revert: 撤銷上一次commit
  • ci: 更改ci configuration
  • chore: 一些不更改src或者test相關文件的提交

scope

說明這次修改的影響範圍,能夠根據本身的狀況來進行填寫, 官方給出了幾個:macos

  • all: 表示影響很大,如修改了總體依賴
  • location: 表示影響小,修改了某個小的功能
  • module: 表示會影響整個模塊,如登陸模塊等

subject

用來簡要描述本次變更,概述便可
npm

susbcribtion

body

具體的描述這次提交的修改內容,應儘可能詳細json

footer

放置備註等。若爲bug,可關聯bug id性能優化

最終樣子:
bash

finally


這就是一次簡單的提交。固然commitizen還不止如此,它還能夠根據咱們每次的commitizen來根據對應的版原本生成對應版本的changelog

changelog

# command
conventional-changelog -p angular -i CHANGELOG.md -s -r 0
複製代碼
  • -i: 表示從CHANGELOG.MD中讀取changelog
  • -s: 讀寫changelog爲同一個文件
  • -r: 表示生成changelogrelease版本數量,默認爲1,所有則是0 因爲個人示例的commit個數不夠多,這裏選取angular的一部分changelog來展現。
    changelog

    固然,若是你還想要嘗試其餘風格的commit的style,能夠下載conventional-changelog-cli來更換不同的風格,它包含了: atom, codemirror, ember, eslint, express, jquery等。只須要將上述的命令中的angular替換爲你想要風格的名字便可。
    咱們能夠方便的在咱們的npm項目中的package.json中的script中增長這樣一條命令方便生成changelog:
{
  "script": {
    "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0 && git add CHANGELOG.MD"
  }
}
複製代碼

以上就是對commitizen的一個簡單的介紹,上面的命令你也能夠配置在githooks裏用來對git個性化的定製。下面推薦幾個另外的插件:

  • standard-version: Automate versioning and CHANGELOG generation, with semver.org and conventionalcommits.org
  • vscode-changelog-generator: vscode extension to generate changelog
  • commitlint: Lint commit messages(這個簡單的說兩句,自定義的話,可是又不想寫模版,還想用commit的話,能夠用這個來限制爲commitizen格式的。下面放一個官方的圖)
    commitlint

你也能夠關注個人公衆號

相關文章
相關標籤/搜索