修复http文件上传 #67
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 中移除经常冲突的分支,单独处理" |