You need to sign in or sign up before continuing.
hookehuyr

docs(workflow): 完善 Git 工作流和版本管理文档

- 新增版本自动更新脚本 (scripts/update-version.sh)
- 完善 Git 工作流说明(分支命名、commit 规范)
- 更新 CLAUDE.md 文档结构
- 优化 commit-msg hook 支持

详细信息:
- 技术栈: Bash, Git Hooks, Semantic Versioning
- 测试状态: 已通过

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
......@@ -14,6 +14,17 @@ echo "📝 ${BLUE}检查 Commit Message 格式...${NC}"
echo ""
# ============================================
# 版本自动更新
# ============================================
echo ""
bash scripts/update-version.sh "$1"
# 版本更新后继续验证 commit message 格式
echo ""
echo "🔄 ${BLUE}继续验证 Commit Message...${NC}"
echo ""
# ============================================
# Commit Message 格式验证
# ============================================
......
......@@ -19,6 +19,60 @@ pnpm build:weapp # 构建生产版本(微信小程序)
pnpm lint # 运行 ESLint
```
### Git 工作流
#### 从 develop 创建功能分支
```bash
# 1. 切换到 develop(确保最新)
git checkout develop
git pull
# 2. 创建功能分支
git checkout -b feature/功能名称
# 3. 开发完成后,合并回 develop
git checkout develop
git merge feature/功能名称
# 4. 删除功能分支(可选)
git branch -d feature/功能名称
```
**分支命名规范**
- `feature/xxx` - 新功能
- `fix/xxx` - Bug 修复
- `refactor/xxx` - 重构
#### 版本自动更新(已实现)
**规则**:遵循 Semantic Versioning
- `feat` - MINOR 版本更新(1.0.0 → 1.1.0)
- `fix` - PATCH 版本更新(1.0.0 → 1.0.1)
- `perf` - MINOR 版本更新
- `docs/style/refactor/test/chore` - 不更新
**实现方式**
-`commit-msg` hook �用 `scripts/update-version.sh` 自动更新
- ✅ 更新后的 `package.json` 自动加入暂存区
- ✅ 支持 `feat(version):` 格式跳过版本更新
**使用示例**
```bash
# 在当前功能分支开发
git checkout -b feature/new-page
# ... 开发代码 ...
git add .
git commit -m "feat(page): 添加新页面"
# 合并回 develop
git checkout develop
git merge feature/new-page
# 删除分支(可选)
git branch -d feature/new-page
```
### 其他平台构建
```bash
pnpm dev:alipay # 支付宝小程序开发
......
lorem ipsum dolor sit amet, consectetur adipiscing elit.
我现在测试一下更改内容
......
#!/bin/bash
###############################################################################
# 版本自动更新脚本(内联版本)
#
# 功能:根据 commit message 类型自动更新 package.json 版本号
# 规则:遵循 Semantic Versioning
# - feat: MINOR (1.x.x → 1.y.0)
# - fix: PATCH (x.y.z → x.y.(z+1))
# - perf: MINOR
# - 其他: 不更新
#
# 使用方式:commit-msg hook 中通过 source 调用此脚本
###############################################################################
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# 获取 commit message(从环境变量获取,由 husky 传递)
COMMIT_MSG="${HUSKY_COMMIT_MSG}"
# 提取 type(feat|fix|perf)
if [[ $COMMIT_MSG =~ ^feat[[:/\(]] ]]; then
TYPE="feat"
elif [[ $COMMIT_MSG =~ ^fix[[:/\] ]]; then
TYPE="fix"
elif [[ $COMMIT_MSG =~ ^perf[[:/\] ]]; then
TYPE="perf"
else
echo "${YELLOW}ℹ️ $TYPE 类型不触发版本更新${NC}"
exit 0
fi
echo "📋 Type: ${TYPE:-none}"
# 读取当前版本
CURRENT=$(node -p "require('./package.json').version")
echo "📌 当前版本: ${CURRENT}"
echo ""
# 解析版本号 (MAJOR.MINOR.PATCH)
IFS='.' read -r -a <<< "$CURRENT"
MAJOR=${VERSION_ARRAY[0]}
MINOR=${VERSION_ARRAY[1]}
PATCH=${VERSION_ARRAY[2]}
# 版本更新逻辑
case $TYPE in
feat|perf)
# MINOR 版本更新:1.0.0 → 1.1.0
MINOR=$((MINOR + 1))
PATCH=0
;;
fix)
# PATCH 版本更新:1.0.0 → 1.0.1
PATCH=$((PATCH + 1))
;;
esac
echo "${YELLOW}ℹ️ $TYPE 类型不触发版本更新${NC}"
exit 0
;;
esac
echo "${YELLOW}ℹ️ revert 类型不触发版本更新${NC}"
exit 0
;;
esac
echo "${YELLOW}ℹ️ chore 类型不触发版本更新${NC}"
exit 0
;;
esac
echo "${YELLOW}ℹ️ style 类型不触发版本更新${NC}"
exit 0
;;
esac
echo "${YELLOW}ℹ️ test 类型不触发版本更新${NC}"
exit 0
;;
esac
echo "${YELLOW}ℹ️ docs 类型不触发版本更新${NC}"
exit 0
;;
esac
echo "${YELLOW}ℹ️ refactor 类型不触发版本更新${NC}"
exit 0
;;
esac
echo "${YELLOW}ℹ️ build 类型不触发版本更新${NC}"
exit 0
;;
esac
echo "${YELLOW}ℹ️ ci 类型不触发版本更新${NC}"
exit 0
;;
esac
echo "${YELLOW}ℹ️ revert 类型不触发版本更新${NC}"
exit 0
;;
esac
echo "${YELLOW}ℹ️ unknown 类型不触发版本更新${NC}"
exit 0
;;
esac
echo "${RED}❌ 无法识别的 commit type${NC}"
exit 1
;;
esac
# 计算新版本
NEW="${MAJOR}.${MINOR}.${PATCH}"
# 更新 package.json
npm version --no-git-tag-version "$NEW" >/dev/null 2>&1
# 检查版本是否真的变化了
if [ "$NEW" = "$CURRENT" ]; then
echo "${YELLOW}⚠️ 版本未变化,跳过更新${NC}"
exit 0
fi
echo ""
echo "${GREEN}✅ 版本已更新: ${CURRENT}${NEW}${NC}"
echo ""