Skip to content

修复http文件上传 #67

修复http文件上传

修复http文件上传 #67

name: 同步main分支到指定分支
on:
push:
branches:
- main
# 环境变量配置 - 可以在这里修改目标分支和源分支
env:
SOURCE_BRANCH: main # 源分支名称
TARGET_BRANCHES: feature # 目标分支名称列表(用逗号分隔,可添加多个分支)
MERGE_STRATEGY: merge # 合并策略: merge(标准合并) 或 rebase(变基合并)
jobs:
sync-branches:
runs-on: ubuntu-latest
steps:
- name: 检出代码
uses: actions/checkout@v4
with:
fetch-depth: 0 # 获取完整的git历史
token: ${{ secrets.ACTIONS_PAT }}
- name: 配置Git用户信息
run: |
git config --global user.name "GitHub Actions Bot"
git config --global user.email "actions@github.com"
- name: 同步到多个分支
run: |
echo "🚀 开始同步流程"
echo "📌 源分支: $SOURCE_BRANCH"
echo "📌 目标分支列表: $TARGET_BRANCHES"
echo "📌 合并策略: $MERGE_STRATEGY"
echo ""
# 将逗号分隔的分支列表转换为数组
IFS=',' read -ra BRANCHES <<< "$TARGET_BRANCHES"
# 记录同步结果
SUCCESS_BRANCHES=()
FAILED_BRANCHES=()
CREATED_BRANCHES=()
# 遍历每个目标分支
for TARGET_BRANCH in "${BRANCHES[@]}"; do
# 去除空格
TARGET_BRANCH=$(echo "$TARGET_BRANCH" | xargs)
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🔄 开始同步到分支: $TARGET_BRANCH"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
# 检查目标分支是否存在
if git ls-remote --heads origin $TARGET_BRANCH | grep -q $TARGET_BRANCH; then
echo "✓ $TARGET_BRANCH 分支存在"
# 切换到源分支
git checkout $SOURCE_BRANCH
# 获取并切换到目标分支
git fetch origin $TARGET_BRANCH
git checkout -B $TARGET_BRANCH origin/$TARGET_BRANCH
# 根据策略进行合并或变基
echo "正在将 $SOURCE_BRANCH 分支同步到 $TARGET_BRANCH 分支..."
SYNC_SUCCESS=false
if [ "$MERGE_STRATEGY" = "rebase" ]; then
echo "使用 rebase 策略..."
if git rebase origin/$SOURCE_BRANCH; then
echo "✅ Rebase 成功,推送到远程仓库"
git push origin $TARGET_BRANCH --force-with-lease
SYNC_SUCCESS=true
else
echo "❌ Rebase 冲突detected!"
echo "冲突文件列表:"
git status --porcelain | grep "^UU\|^AA\|^DD" || echo "无法确定冲突文件"
git rebase --abort
FAILED_BRANCHES+=("$TARGET_BRANCH")
fi
else
echo "使用 merge 策略..."
if git merge origin/$SOURCE_BRANCH --no-edit; then
echo "✅ 合并成功,推送到远程仓库"
git push origin $TARGET_BRANCH
SYNC_SUCCESS=true
else
echo "❌ 合并冲突detected!"
echo "冲突文件列表:"
git status --porcelain | grep "^UU\|^AA\|^DD" || echo "无法确定冲突文件"
git merge --abort
FAILED_BRANCHES+=("$TARGET_BRANCH")
fi
fi
if [ "$SYNC_SUCCESS" = true ]; then
SUCCESS_BRANCHES+=("$TARGET_BRANCH")
fi
else
echo "⚠️ $TARGET_BRANCH 分支不存在,从 $SOURCE_BRANCH 分支创建"
git checkout -B $TARGET_BRANCH $SOURCE_BRANCH
git push origin $TARGET_BRANCH --set-upstream
echo "✅ 成功创建 $TARGET_BRANCH 分支"
CREATED_BRANCHES+=("$TARGET_BRANCH")
SUCCESS_BRANCHES+=("$TARGET_BRANCH")
fi
done
# 输出最终汇总
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📊 同步结果汇总"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "✅ 成功同步的分支 (${#SUCCESS_BRANCHES[@]}): ${SUCCESS_BRANCHES[*]}"
[ ${#CREATED_BRANCHES[@]} -gt 0 ] && echo "🆕 新创建的分支 (${#CREATED_BRANCHES[@]}): ${CREATED_BRANCHES[*]}"
[ ${#FAILED_BRANCHES[@]} -gt 0 ] && echo "❌ 失败的分支 (${#FAILED_BRANCHES[@]}): ${FAILED_BRANCHES[*]}"
# 如果有失败的分支,退出码为1
if [ ${#FAILED_BRANCHES[@]} -gt 0 ]; then
echo ""
echo "⚠️ 部分分支同步失败,请手动处理冲突"
exit 1
fi
env:
GITHUB_TOKEN: ${{ secrets.ACTIONS_PAT }}
- name: 输出同步结果
if: success()
run: |
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "✅ 所有分支同步成功!"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📌 源分支: $SOURCE_BRANCH"
echo "📌 目标分支列表: $TARGET_BRANCHES"
echo "📝 同步的提交: ${{ github.sha }}"
echo "👤 推送者: ${{ github.actor }}"
echo "🔄 同步方式: $MERGE_STRATEGY"
echo "⏰ 同步时间: $(date '+%Y-%m-%d %H:%M:%S')"
- name: 冲突处理提示
if: failure()
run: |
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "⚠️ 部分分支同步失败 - 检测到合并冲突"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "🔧 手动解决冲突的步骤:"
echo "1. 本地克隆仓库: git clone <repo-url>"
echo "2. 切换到失败的目标分支: git checkout <target-branch>"
echo "3. 合并源分支: git merge $SOURCE_BRANCH"
echo "4. 手动解决冲突文件"
echo "5. 添加解决后的文件: git add ."
echo "6. 提交解决结果: git commit"
echo "7. 推送到远程: git push origin <target-branch>"
echo ""
echo "💡 提示:"
echo " - 可以修改工作流中的 MERGE_STRATEGY 环境变量来改变合并策略"
echo " - 可以从 TARGET_BRANCHES 中移除经常冲突的分支,单独处理"