cover

Git Branch 策略圖

Branch 策略

一般公司常見的 branch 配置:

Branch 名稱用途
main/master/prod對外產品的正式版本
staging/uat/pre-prodRelease 前的最後驗收環境
dev/sit整合開發項目的分支
feature/hotfix/release依情境建立的臨時分支

基本原則

feature → development → staging → main
  • 不跨層
  • 不回頭

開發流程

建立 Feature Branch

從 development 建立新的 branch,命名帶上 issue ID:

git checkout development
git checkout -b feature/ISSUE-123-add-login

開發完成後提交

git add .
git commit -m "feat: add login feature"
git push -u origin feature/ISSUE-123-add-login

發出 Merge Request

在 GitLab/GitHub 上從 feature branch 對 development 發出 MR。

Commit Lint 工具

使用 Commitizen 規範 commit message 格式。

全域安裝(推薦)

npm install -g commitizen
npm install -g cz-conventional-changelog
echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc
 
# 之後使用
git cz

專案安裝

npx commitizen init cz-conventional-changelog --save-dev --save-exact
npx cz

設定 Husky Hook

# 初始化 husky
npx husky-init && npm install
 
# 安裝 commitlint
npm install --save-dev @commitlint/{config-conventional,cli}
echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.js
 
# 加入 hook
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit $1'

Changelog 自動生成

安裝

npm install --save-dev conventional-changelog-cli

設定 package.json

{
  "scripts": {
    "changelog": "conventional-changelog -i CHANGELOG.md -s"
  }
}

生成 Changelog

npm run changelog

產出範例:

## 1.0.0 (2023-05-19)
 
* feat: add file topicAAA ([836900e](https://gitlab.com/...))

Release 流程簡述

# 切到 staging
git checkout staging
git pull
git merge development
 
# 建立 release branch
git checkout -b release/20230519
git tag -a "v1.0.2" -m "add commit lint, changelog function"
git push -u origin release/20230519
 
# 對 main 發出 MR

各角色職責

角色關注重點
RD管好 development 上的開發
Releaser管理 staging → main 的流程
Manager/Infra規劃退版機制

延伸閱讀