@echo off :: Set UTF-8 encoding chcp 65001 :: Set window title title UPM Package Update Tool :: Set console color color a echo 开始提交到git upm.... echo 提交upm前请确保当前分支所有改动都已经提交! :: Extract version from package.json for /f "tokens=2 delims=:, " %%i in ('findstr "version" Assets\package.json') do ( set version=%%i ) :: Remove quotes set version=%version:"=% echo 从package.json中读取的版本号为:%version% :: Check if tag exists git tag | findstr "%version%" > nul if %errorlevel% equ 0 ( echo 错误:版本号 %version% 对应的tag已存在! pause exit ) set /p Flg=确认提交的版本号%version%,是否开始提交(y/n) -------- : IF "%Flg%" equ "y" ( echo 开始提交,请勿关闭该窗口! :: Force switch to master first and ensure clean state echo 切换到master分支并清理工作区... git checkout -f master git reset --hard HEAD git clean -fd :: Verify Assets folder exists if not exist "Assets" ( echo 错误:Assets文件夹不存在! goto :END ) :: Delete local upm branch if exists echo 清理本地upm分支... git branch -D upm 2>nul :: Create new upm branch from current Assets folder with verbose output echo 正在创建upm分支... git subtree split --prefix Assets --branch upm --verbose if %errorlevel% neq 0 ( echo 错误:创建upm分支失败! echo 正在尝试修复... :: Try to fix common issues git gc git prune :: Second attempt echo 第二次尝试创建upm分支... git subtree split --prefix Assets --branch upm --verbose if %errorlevel% neq 0 ( echo 错误:创建upm分支失败,请确保: echo 1. Assets文件夹存在且不为空 echo 2. 当前分支没有未提交的更改 echo 3. Git仓库状态正常 goto :END ) ) :: Force update local upm branch with remote changes echo 更新远程upm分支... git fetch origin upm git checkout -f upm git reset --hard origin/upm :: Create new subtree split git checkout -f master git subtree split --prefix Assets --branch upm-temp :: Apply new changes and force push git checkout -f upm git merge upm-temp --allow-unrelated-histories -X theirs git branch -D upm-temp :: Create and push tag with explicit steps echo 创建并推送tag %version%... git tag -d %version% 2>nul git tag %version% upm if %errorlevel% neq 0 ( echo 错误:创建tag失败! git checkout -f master goto :END ) :: Push changes and tags separately echo 推送upm分支... git push -f origin upm if %errorlevel% neq 0 ( echo 错误:推送upm分支失败! git checkout -f master goto :END ) echo 推送tag... git push origin %version% if %errorlevel% neq 0 ( echo 错误:推送tag失败! git tag -d %version% git checkout -f master goto :END ) :: Return to master branch git checkout -f master echo 所有操作已完成! ) :END echo 执行完成! pause exit