83 lines
2.4 KiB
Bash
Executable File
83 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# sync-upstream.sh — 从 upstream (origin/main) 同步更新,保留自定义改动
|
||
# 用法: ./tools/scripts/sync-upstream.sh
|
||
set -euo pipefail
|
||
|
||
REPO_ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
||
UPSTREAM="origin/main"
|
||
|
||
cd "$REPO_ROOT"
|
||
|
||
echo "========================================"
|
||
echo " Antigravity Fork — Upstream Sync Tool"
|
||
echo "========================================"
|
||
echo ""
|
||
|
||
# Step 1: 检查工作区
|
||
if ! git diff --quiet || ! git diff --staged --quiet; then
|
||
echo "❌ 工作区有未提交的改动,请先 git stash 或 git commit"
|
||
git status --short
|
||
exit 1
|
||
fi
|
||
|
||
# Step 2: Fetch
|
||
echo "[1/4] Fetching upstream..."
|
||
git fetch origin
|
||
|
||
# Step 3: 检查是否有新 commits
|
||
NEW=$(git log --oneline HEAD.."$UPSTREAM" 2>/dev/null | wc -l | tr -d ' ')
|
||
if [ "$NEW" -eq 0 ]; then
|
||
echo "✅ 已是最新,无需同步。"
|
||
exit 0
|
||
fi
|
||
|
||
echo ""
|
||
echo "上游有 $NEW 个新 commits:"
|
||
git log --oneline HEAD.."$UPSTREAM"
|
||
echo ""
|
||
|
||
# Step 4: 备份当前 patches
|
||
PATCH_DIR="/tmp/antigravity-patches-$(date +%Y%m%d-%H%M%S)"
|
||
echo "[2/4] 备份自定义 patches 到 $PATCH_DIR ..."
|
||
mkdir -p "$PATCH_DIR"
|
||
git format-patch "$UPSTREAM"..HEAD -o "$PATCH_DIR/" --no-stat
|
||
BACKED=$(ls "$PATCH_DIR"/*.patch 2>/dev/null | wc -l | tr -d ' ')
|
||
echo " 已备份 $BACKED 个 patch"
|
||
|
||
# Step 5: Rebase
|
||
echo ""
|
||
echo "[3/4] 执行 rebase (git rebase $UPSTREAM)..."
|
||
echo " 如果出现冲突,请参考 .agents/workflows/sync-upstream.md 中的冲突解决指南"
|
||
echo ""
|
||
if ! git rebase "$UPSTREAM"; then
|
||
echo ""
|
||
echo "❌ Rebase 出现冲突!"
|
||
echo ""
|
||
echo "请按以下步骤处理:"
|
||
echo " 1. 查看冲突文件: git diff --name-only --diff-filter=U"
|
||
echo " 2. 解决冲突(参考 .agents/workflows/sync-upstream.md)"
|
||
echo " 3. git add <解决的文件>"
|
||
echo " 4. git rebase --continue"
|
||
echo ""
|
||
echo "备份的 patches 在: $PATCH_DIR"
|
||
exit 1
|
||
fi
|
||
|
||
# Step 6: 编译验证
|
||
echo "[4/4] 编译验证..."
|
||
if ! (cd "$REPO_ROOT/backend" && go build ./... 2>&1); then
|
||
echo ""
|
||
echo "❌ 编译失败!rebase 后有破坏性改动需要修复。"
|
||
echo "备份的 patches 在: $PATCH_DIR"
|
||
exit 1
|
||
fi
|
||
|
||
echo ""
|
||
echo "✅ 同步完成!"
|
||
echo ""
|
||
echo "自定义改动(我方 commits)已成功移植到最新 upstream 上。"
|
||
echo "请运行以下命令推送:"
|
||
echo " git push origin main --force-with-lease"
|
||
echo ""
|
||
echo "备份路径(可删除): $PATCH_DIR"
|