49 lines
1.3 KiB
Bash
49 lines
1.3 KiB
Bash
#!/usr/bin/env bash
|
|
# 将 dev 合并到 main 并推送(生产分支,不含部署)
|
|
# 用法: deploy/git-sync-to-main.sh [merge message]
|
|
# 合并后发生产: deploy/deploy-prod.sh
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
|
|
GIT_REMOTE="${GIT_REMOTE:-origin}"
|
|
DEV_BRANCH="${DEV_BRANCH:-dev_jacy}"
|
|
STAGING_BRANCH="${STAGING_BRANCH:-dev}"
|
|
PROD_BRANCH="${PROD_BRANCH:-main}"
|
|
|
|
MERGE_MSG="${1:-merge($STAGING_BRANCH): sync to $PROD_BRANCH}"
|
|
|
|
cd "$REPO_ROOT"
|
|
|
|
if [[ -n "$(git status --porcelain)" ]]; then
|
|
echo "ERROR: 工作区有未提交更改,请先 commit 或 stash" >&2
|
|
exit 1
|
|
fi
|
|
|
|
ORIGINAL="$(git branch --show-current)"
|
|
|
|
echo "==> fetch $GIT_REMOTE"
|
|
git fetch "$GIT_REMOTE"
|
|
|
|
echo "==> checkout $PROD_BRANCH"
|
|
git checkout "$PROD_BRANCH"
|
|
git pull "$GIT_REMOTE" "$PROD_BRANCH"
|
|
|
|
echo "==> merge $STAGING_BRANCH -> $PROD_BRANCH"
|
|
git merge "$STAGING_BRANCH" -m "$MERGE_MSG"
|
|
|
|
echo "==> push $PROD_BRANCH"
|
|
git push "$GIT_REMOTE" "$PROD_BRANCH"
|
|
|
|
if git show-ref --verify --quiet "refs/heads/$DEV_BRANCH"; then
|
|
echo "==> checkout $DEV_BRANCH"
|
|
git checkout "$DEV_BRANCH"
|
|
elif [[ "$ORIGINAL" != "$PROD_BRANCH" ]]; then
|
|
echo "==> checkout $ORIGINAL"
|
|
git checkout "$ORIGINAL"
|
|
fi
|
|
|
|
echo "==> 完成: $PROD_BRANCH = $(git rev-parse --short HEAD)"
|
|
echo " 发生产请执行: bash deploy/deploy-prod.sh"
|