

Branch 策略
一般公司常見的 branch 配置:
| Branch 名稱 | 用途 |
|---|---|
| main/master/prod | 對外產品的正式版本 |
| staging/uat/pre-prod | Release 前的最後驗收環境 |
| 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 | 規劃退版機制 |