規範化 Git 合做流程

Commitizen

縱觀那些 GitHub 上 star 不少的開源庫,開發流程都是極其規範的,Commitizen 即是用來規範化 git 提交信息的一個好工具。node

AP2yb6.png

commitizen 一般要與適配器一塊兒使用,通俗點來講是須要一個 commit message 模板,目前主流的是符合 Angular 規範的 cz-conventional-changeloggit

✨ 安裝

npm i -g commitizen
npm i -g cz-conventional-changelog
echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc
複製代碼

以上命令表明全局使用 cz-conventional-changelog 適配器,你也能夠經過如下命令來局部安裝適配器github

# 這種方式是使用npm來安裝
commitizen init cz-conventional-changelog --save-dev --save-exact
# 這種方式是使用yarn來安裝
commitizen init cz-conventional-changelog --yarn --dev --exact
複製代碼

假如你已經全局安裝了適配器,那麼上面的命令會報 A previous adapter is already configured. Use --force to override,如它所說,只須要加上 --force 參數便可強制使用局部適配器,成功後會在本地局部安裝 cz-conventional-changelog,並在 package.json 中寫入如下內容npm

{
  "devDependencies": {
    "cz-conventional-changelog": "^2.1.0"
  },
  "config": {
    "commitizen": {
      "path": "./node_modules/cz-conventional-changelog"
    }
  }
}
複製代碼

🎉 使用

安裝成功後便可經過命令 git-cz 來代替 git commit 進行提交了json

AP6OPJ.png

git-cz 具備 git commit 一切參數,就像這樣: git-cz -abash

VSCode 用戶能夠安裝一個 Visual Studio Code Commitizen Support 擴展以使用更友好的 commit 界面, 按下 F1,輸入 conventional commit,效果以下ide

APgNpd.png
根據步驟操做就 ok 了。


Standard Version

🎈 用途

  • 自動升級 version
  • 自動生成 changelog
  • 自動打 tag

每次更新版本後會自動將 package.json(et al.)CHANGELOG.md 提交工具

必須確保 Commit Message 符合 Conventional Commits 規範哦!上面使用的 cz-conventional-changelog 是符合這個規範的。post

Ai9KgJ.png

🎄 安裝

這裏我選擇全局安裝優化

npm i -g standard-version
複製代碼

方便起見,首先新增一個 npm run script

{
  "version": "1.0.0",
  "scripts": {
    "release": "standard-version"
  }
}
複製代碼

🎀 發佈初版

發佈初版時運行如下命令,這條命令不會修改版本號

npm run release -- -f
# or
standard-version -f
複製代碼

🎁 升級一個版本

npm run release
# or
standard-version
複製代碼

🎨 生成一個預發佈版本

npm run release -- -p
# or
standard-version -p
複製代碼

會獲得一個相似 1.0.1-0 1.0.1-1 ... 這種版本 若是但願爲預發佈版本命名,能夠經過 --prerelease <name> 指定名稱。 例如,假設您的預發行版應該包含 alpha 前綴

npm run release -- -p alpha
# or
standard-version -p alpha
複製代碼

這將獲得一個 1.0.1-alpha.0 版本

🎏 手動選擇版本

APXW0U.png

standard-version 遵循 Semver 語義化版本規範,假如你上次 commit 時選擇的是 fix,這時默認應該更新的是個 path 版本,若是你想手動選擇版本,能夠這樣

npm run release -- -r minor
# or
standard-version -r 1.1.0
複製代碼

🏀 阻止 Git Hooks

當 release 後,程序會自動將修改後的 package.jsonCHANGELOG.md 文件 commit 掉,因此當使用 pre-commit 這種鉤子時候可能就會報錯,能夠經過 --no-verify 跳過檢測

npm run release -- --no-verify
# or
standard-version -n
複製代碼

🔫 生命週期腳本

standard-version 支持一些生命週期腳本

  • prerelease: 發佈以前
  • prebump / postbump: 版本號更新以前 / 以後
  • prechangelog / postchangelog: changelog 生成以前 / 以後
  • precommit / postcommit: package.json 和 changelog 文件提交以前 / 提交以後
  • pretag / posttag: 打 tag 以前 / 以後

就像這樣,你能夠在某個聲明週期中偷摸作點事情 🤡

{
  "standard-version": {
    "scripts": {
      "prebump": "echo 9.9.9"
    }
  }
}
複製代碼

changelog 中 issue 地址默認是 GitHub 上的,若是想修改爲 Jira 的地址,能夠經過 postchangelog 配合 replace 庫來修改它的連接地址

{
  "standard-version": {
    "scripts": {
      "postchangelog": "replace 'https://github.com/myproject/issues/' 'https://myjira/browse/' CHANGELOG.md"
    }
  }
}
複製代碼

你也能夠跳過某些生命週期 (bump, changelog, commit, tag) ,假如不想它自動打 tag,你能夠這樣

{
  "standard-version": {
    "skip": {
      "tag": true
    }
  }
}
複製代碼

🎠 Tag 前綴

默認打的 tag 前綴是 v,生成的 tag 都是相似 v1.0.0 這種,能夠經過 -t 設置前綴

npm run release -- -t @scope/package\@
# or
standard-version -t @scope/package\@
複製代碼

生成的 tag 看起來像這樣 @scope/package@2.0.0

😊 幫助

npm run release -- -h
# or
standard-version -h
複製代碼

更多

除此以外,還能夠利用 husky + prettier eslint commitlint lint-staged 等工具進一步優化 git 流程,利用 huskypre-commit 鉤子,能夠在 commit 以前處理一些事情,就像

  • 代碼格式化
  • 代碼校驗
  • Commit Message 校驗
  • ...
相關文章
相關標籤/搜索