Use when setting up or installing the automated GitLab git workflow in a project, including branch versioning, monthly tags, auto-merge to develop, and branch cleanup.
65
82%
Does it follow best practices?
Impact
—
No eval scenarios have been run
Passed
No known issues
#!/bin/bash
# =============================================================================
# add-member.sh - 月中新增成员(不影响已有分支)
# 作用:
# 基于当前最新 tag,为新成员创建 base 分支
# 不打新 tag,不删除任何已有分支
# 用法:bash scripts/gitflow/add-member.sh <username>
# =============================================================================
set -e
USERNAME="$1"
if [ -z "$USERNAME" ]; then
echo "用法:bash scripts/gitflow/add-member.sh <username>"
echo "示例:bash scripts/gitflow/add-member.sh zhangsan"
exit 1
fi
# ── 读取当前最新 tag ──────────────────────────────────────────────────────────
git fetch --tags origin
LATEST_TAG=$(git tag --list 'V[0-9]*.[0-9]*.[0-9]*' \
| grep -E '^V[0-9]+\.[0-9]+\.[0-9]+$' \
| sort -V \
| tail -1)
if [ -z "$LATEST_TAG" ]; then
echo "错误:未找到任何版本 tag,请先执行 monthly.sh 初始化"
exit 1
fi
echo "[add-member] 当前版本:$LATEST_TAG"
# ── 检查该成员的 base 分支是否已存在 ─────────────────────────────────────────
NEW_BASE="${LATEST_TAG}_base_${USERNAME}"
EXISTING=$(git ls-remote --heads origin "$NEW_BASE" | wc -l)
if [ "$EXISTING" -gt 0 ]; then
echo "[add-member] 分支已存在:$NEW_BASE,无需重复创建"
exit 0
fi
# ── 基于 master 当前 HEAD 创建 base 分支 ─────────────────────────────────────
git fetch origin master
MASTER_SHA=$(git rev-parse origin/master)
git push origin "${MASTER_SHA}:refs/heads/${NEW_BASE}"
echo "[add-member] ✓ 已创建:$NEW_BASE"
# ── 更新配置文件(追加成员)──────────────────────────────────────────────────
REPO_ROOT=$(git rev-parse --show-toplevel)
MEMBERS_FILE="${REPO_ROOT}/.gitflow-members"
if grep -qE "^${USERNAME}$" "$MEMBERS_FILE" 2>/dev/null; then
echo "[add-member] $USERNAME 已在 .gitflow-members 中,跳过"
else
echo "$USERNAME" >> "$MEMBERS_FILE"
echo "[add-member] 已将 $USERNAME 追加到 .gitflow-members"
echo "[add-member] 请提交该文件:git add .gitflow-members && git commit -m 'chore: add member $USERNAME'"
fi