1
0
mirror of https://github.com/DSPBluePrints/FactoryBluePrints.git synced 2026-03-22 06:53:22 +08:00

Merge pull request #206 from soarqin/scripts/new-updater

新的一键更新脚本
This commit is contained in:
linlin
2026-03-04 20:38:02 +08:00
committed by GitHub
2 changed files with 443 additions and 0 deletions

400
一键更新仓库.bat Normal file
View File

@@ -0,0 +1,400 @@
@echo off
SETLOCAL enableextensions enabledelayedexpansion
chcp 65001 >NUL
REM 检查参数,如果不为空则只运行特定函数
IF "x%1" == "x" GOTO START
CALL :%1
ENDLOCAL
EXIT /b %errorlevel%
:START
REM 本地目录,如果当前目录有.git文件夹的存在则不使用此目录
SET LocalFolder=FactoryBluePrints
REM 仓库地址
SET RepoUrl=https://github.com/DSPBluePrints/FactoryBluePrints.git
REM 仓库README地址
SET READMEUrl=https://github.com/DSPBluePrints/FactoryBluePrints/blob/main/README.md
REM MinGit安装位置
SET MinGitFolder=%ALLUSERSPROFILE%\MinGit
REM MinGit版本号
SET MinGitVersion=2.52.0
CALL :SETUP_MINGIT
IF %errorlevel% NEQ 0 (
GOTO EOF_WITH_ERROR
)
CALL :CLONE_REPO
IF %errorlevel% == 1 (
GOTO EOF_WITH_ERROR
)
IF %errorlevel% == -1 (
GOTO END
)
IF %errorlevel% NEQ 0 (
GOTO END_WITH_ERROR
)
CALL :UPDATE_REPO
IF %errorlevel% == 1 (
GOTO EOF
)
IF %errorlevel% NEQ 0 (
GOTO END_WITH_ERROR
)
:END
if NOT [%GIT_PATH%]==[] "%GIT_PATH%" config --global --unset-all safe.directory "\*"
ENDLOCAL
ECHO  按任意键关闭此窗口...
PAUSE >NUL
EXIT /b 0
:END_WITH_ERROR
ECHO 运行过程因为出现错误而中止蓝图文件没有发生任何变动。
ECHO 常见问题请阅读说明%READMEUrl%
:EOF_WITH_ERROR
ENDLOCAL
ECHO  按任意键关闭此窗口...
PAUSE >NUL
EXIT /b 1
REM ==================== Steps ====================
:SETUP_MINGIT
REM 查找系统可用的Git如果没有就安装MinGit
REM 检查Git是否安装
git --version >NUL 2>&1 && (SET hasGit=1) || (SET hasGit=0)
IF %hasGit% NEQ 0 (
SET GIT_PATH=git
EXIT /b 0
)
"%GIT_INSTALL_ROOT%\bin\git" --version >NUL 2>&1 && (SET hasGit=1) || (SET hasGit=0)
IF %hasGit% NEQ 0 (
SET GIT_PATH=%GIT_INSTALL_ROOT%\bin\git
EXIT /b 0
)
"%CD%\MinGit\cmd\git" --version >NUL 2>&1 && (SET hasGit=1) || (SET hasGit=0)
IF %hasGit% NEQ 0 (
SET GIT_PATH=%CD%\MinGit\cmd\git
EXIT /b 0
)
"%MinGitFolder%\cmd\git" --version >NUL 2>&1 && (SET hasGit=1) || (SET hasGit=0)
IF %hasGit% NEQ 0 (
SET GIT_PATH=%MinGitFolder%\cmd\git
EXIT /b 0
)
:INSTALL_MINGIT
REM 安装MinGit
ECHO ^>^> 系统内未找到已经安装的Git将下载MinGit并安装到%MinGitFolder%
ECHO ^>^> 如果以后不再需要可以手动删除这个目录。
ECHO ^>^> 请选择下载方式:
ECHO  0. 从GitHub原始地址下载 (直接回车默认选择此方式)
ECHO  1. 使用ghfast.top代理
ECHO  2. 使用gh-proxy.org代理
ECHO  3. 使用gh.ddlc.top代理
ECHO  4. 使用www.ytools.cc/gh代理
ECHO  5. 使用git.yylx.win代理
ECHO  6. 使用ghfile.geekertao.top代理
ECHO  7. 使用ghm.078465.xyz代理
ECHO  8. 使用gitproxy.127731.xyz代理
ECHO  9. 使用jiashu.1win.eu.org代理
ECHO  10. 使用github.tbedu.top代理
ECHO  Q. 我不要下载了我要退出
:INSTALL_MINGIT_INPUT
SET /p res=^>^> 请输入:
SET GHPROXY=
IF /i "x%res%"=="x" (
GOTO INSTALL_MINGIT_GHPROXY_WAS_SET
)
IF /i "%res%"=="0" (
GOTO INSTALL_MINGIT_GHPROXY_WAS_SET
)
IF /i "%res%"=="1" (
SET GHPROXY=ghfast.top/
GOTO INSTALL_MINGIT_GHPROXY_WAS_SET
)
IF /i "%res%"=="2" (
SET GHPROXY=gh-proxy.org/
GOTO INSTALL_MINGIT_GHPROXY_WAS_SET
)
IF /i "%res%"=="3" (
SET GHPROXY=gh.ddlc.top/
GOTO INSTALL_MINGIT_GHPROXY_WAS_SET
)
IF /i "%res%"=="4" (
SET GHPROXY=www.ytools.cc/gh/
GOTO INSTALL_MINGIT_GHPROXY_WAS_SET
)
IF /i "%res%"=="5" (
SET GHPROXY=git.yylx.win/
GOTO INSTALL_MINGIT_GHPROXY_WAS_SET
)
IF /i "%res%"=="6" (
SET GHPROXY=ghfile.geekertao.top/
GOTO INSTALL_MINGIT_GHPROXY_WAS_SET
)
IF /i "%res%"=="7" (
SET GHPROXY=ghm.078465.xyz/
GOTO INSTALL_MINGIT_GHPROXY_WAS_SET
)
IF /i "%res%"=="8" (
SET GHPROXY=gitproxy.127731.xyz/
GOTO INSTALL_MINGIT_GHPROXY_WAS_SET
)
IF /i "%res%"=="9" (
SET GHPROXY=jiashu.1win.eu.org/https://
GOTO INSTALL_MINGIT_GHPROXY_WAS_SET
)
IF /i "%res%"=="10" (
SET GHPROXY=github.tbedu.top/
GOTO INSTALL_MINGIT_GHPROXY_WAS_SET
)
IF /i "%res%"=="Q" (
ECHO -- 已取消MinGit下载。
EXIT /b 1
)
ECHO  输入有误。
GOTO INSTALL_MINGIT_INPUT
:INSTALL_MINGIT_GHPROXY_WAS_SET
SET MinGitUrl=https://%GHPROXY%github.com/git-for-windows/git/releases/download/v%MinGitVersion%.windows.1/MinGit-%MinGitVersion%-64-bit.zip
rmdir /s /q %MinGitFolder% 1>NUL 2>NUL
mkdir %MinGitFolder% 2>NUL
ECHO | set /p=-- 正在下载MinGit...
powershell -Command "(New-Object Net.WebClient).DownloadFile('%MinGitUrl%', '%MinGitFolder%\MinGit.zip')"
IF %errorlevel% NEQ 0 (
ECHO  错误!
ECHO !! MinGit下载失败请检查你的网络或使用加速器/挂梯子后再次运行。
EXIT /b 1
)
ECHO  完成
ECHO | set /p=-- 正在解压MinGit...
powershell -Command "(New-Object -Com Shell.Application).NameSpace('%MinGitFolder%').CopyHere((new-object -com shell.application).NameSpace('%MinGitFolder%\MinGit.zip').Items(), 1556)"
DEL /f /q %MinGitFolder%\MinGit.zip
IF %errorlevel% NEQ 0 (
ECHO  错误!
ECHO !! MinGit解压失败可能是网络问题导致下载的文件不完整。
EXIT /b 1
)
ECHO  完成
SET GIT_PATH=%MinGitFolder%\cmd\git
EXIT /b %errorlevel%
:SETUP_MIRROR
REM 设置仓库镜像或代理
ECHO ^>^> 请选择仓库镜像或代理:
ECHO  0. GitHub (将删除已设置的镜像)
ECHO  1. 使用Bitbucket
ECHO  2. 使用Codeberg
ECHO  10. 使用ghfast.top代理GitHub
ECHO  11. 使用gh-proxy.org代理GitHub
ECHO  12. 使用gh.ddlc.top代理GitHub
ECHO  13. 使用www.ytools.cc/gh代理GitHub
ECHO  14. 使用git.yylx.win代理GitHub
ECHO  15. 使用ghfile.geekertao.top代理GitHub
ECHO  16. 使用ghm.078465.xyz代理GitHub
ECHO  17. 使用gitproxy.127731.xyz代理GitHub
ECHO  18. 使用jiashu.1win.eu.org代理GitHub
ECHO  19. 使用github.tbedu.top代理GitHub
ECHO  Q. 我不要设置了我要退出
:SETUP_MIRROR_INPUT
SET /p res=^>^> 请输入:
SET MIRROR_ADDR=
IF /i "%res%"=="0" (
GOTO MIRROR_WAS_SET
)
IF /i "%res%"=="1" (
SET MIRROR_ADDR=https://bitbucket.org/
GOTO MIRROR_WAS_SET
)
IF /i "%res%"=="2" (
SET MIRROR_ADDR=https://codeberg.org/
GOTO MIRROR_WAS_SET
)
IF /i "%res%"=="10" (
SET MIRROR_ADDR=https://ghfast.top/github.com/
GOTO MIRROR_WAS_SET
)
IF /i "%res%"=="11" (
SET MIRROR_ADDR=https://gh-proxy.org/github.com/
GOTO MIRROR_WAS_SET
)
IF /i "%res%"=="12" (
SET MIRROR_ADDR=https://gh.ddlc.top/github.com/
GOTO MIRROR_WAS_SET
)
IF /i "%res%"=="13" (
SET MIRROR_ADDR=https://www.ytools.cc/gh/github.com/
GOTO MIRROR_WAS_SET
)
IF /i "%res%"=="14" (
SET MIRROR_ADDR=https://git.yylx.win/github.com/
GOTO MIRROR_WAS_SET
)
IF /i "%res%"=="15" (
SET MIRROR_ADDR=https://ghfile.geekertao.top/github.com/
GOTO MIRROR_WAS_SET
)
IF /i "%res%"=="16" (
SET MIRROR_ADDR=https://ghm.078465.xyz/github.com/
GOTO MIRROR_WAS_SET
)
IF /i "%res%"=="17" (
SET MIRROR_ADDR=https://gitproxy.127731.xyz/github.com/
GOTO MIRROR_WAS_SET
)
IF /i "%res%"=="18" (
SET MIRROR_ADDR=https://jiashu.1win.eu.org/https://github.com/
GOTO MIRROR_WAS_SET
)
IF /i "%res%"=="19" (
SET MIRROR_ADDR=https://github.tbedu.top/github.com/
GOTO MIRROR_WAS_SET
)
IF /i "%res%"=="Q" (
EXIT /b 1
)
ECHO  输入有误。
GOTO SETUP_MIRROR_INPUT
:MIRROR_WAS_SET
REM Loop through all url.*.insteadOf entries
FOR /F "USEBACKQ tokens=1,* delims= " %%a IN (`"%GIT_PATH%" config --local --get-regexp ^^url\..*\.insteadOf$`) DO (
IF "%%b"=="https://github.com/" (
"%GIT_PATH%" config --unset-all "%%a"
)
)
IF x%MIRROR_ADDR% NEQ x (
"%GIT_PATH%" config --local url."%MIRROR_ADDR%".insteadOf "https://github.com/"
)
EXIT /b %errorlevel%
:CLONE_REPO
REM 如果仓库不存在就Clone仓库
"%GIT_PATH%" config --global core.quotepath false
"%GIT_PATH%" config --global --add safe.directory "*"
IF EXIST "%CD%\%LocalFolder%\.git" EXIT /b 0
IF EXIST "%CD%\.git" (
SET LocalFolder=.
EXIT /b 0
)
FOR /F "tokens=* USEBACKQ" %%F IN (`ECHO %CD%`) DO (
IF "%%~nF"=="%LocalFolder%" (
SET LocalFolder=.
)
)
ECHO -- 未检测到已下载的蓝图仓库,将重新拉取。
IF NOT EXIST "%LocalFolder%" (
MKDIR "%LocalFolder%"
IF %errorlevel% NEQ 0 (
ECHO  错误!
ECHO !! 无法创建本地目录 %LocalFolder% 。请检查权限设置。
EXIT /b 1
)
)
PUSHD %LocalFolder% 1>NUL 2>NUL
"%GIT_PATH%" init
REM 设置镜像
CALL :SETUP_MIRROR
IF %errorlevel% NEQ 0 (
EXIT /b 1
)
ECHO -- 正在拉取仓库。容量较大,请耐心等待...
"%GIT_PATH%" remote add origin "%RepoUrl%"
"%GIT_PATH%" fetch --depth=1 origin
"%GIT_PATH%" reset --hard origin/main
"%GIT_PATH%" checkout -t origin/main
IF %errorlevel% NEQ 0 (
ECHO  错误!
ECHO !! 仓库拉取失败。如果没有其他警告,这通常是网络波动,重试就行,无效请使用加速器/挂梯子后再更新。
POPD >NUL
EXIT /b 2
)
ECHO ^<^< 蓝图文件拉取完毕,现在可以直接关闭此窗口。
POPD >NUL
EXIT /b -1
:UPDATE_REPO
REM 拉取更新仓库
PUSHD %LocalFolder% 1>NUL 2>NUL
IF NOT EXIST ".\.gitignore" (
"%GIT_PATH%" reset --hard 1>NUL 2>NUL
)
REM 检查远程路径,因为镜像的原因不再检查
REM FOR /F "tokens=* USEBACKQ" %%F IN (`"%GIT_PATH%" remote get-url origin`) DO (
REM SET RemoteUrl=%%F
REM )
REM IF "%RemoteUrl%" NEQ "%RepoUrl%" (
REM ECHO -- 仓库URL不匹配修改仓库URL...
REM "%GIT_PATH%" remote set-url origin "%RepoUrl%"
REM )
SET GIT_SSL_NO_VERIFY=true
ECHO | set /p=-- 正在更新蓝图仓库...
"%GIT_PATH%" pull origin main 1>NUL 2>NUL
IF %errorlevel% NEQ 0 (
POPD >NUL
ECHO  错误!
ECHO !! 更新失败。如果没有其他警告,这通常是网络波动,重试就行,建议使用加速器/挂梯子,或者切换镜像/代理后再更新。
EXIT /b 1
)
ECHO  完成
POPD 1>NUL 2>NUL
ECHO ^<^< 蓝图文件更新完毕。
EXIT /b 0

43
切换镜像.bat Normal file
View File

@@ -0,0 +1,43 @@
@echo off
chcp 65001 >NUL
SETLOCAL enableextensions enabledelayedexpansion
REM 本地目录,如果当前目录有.git文件夹的存在则不使用此目录
SET LocalFolder=FactoryBluePrints
REM 设置MinGit
CALL "一键更新仓库.bat" SETUP_MINGIT
IF %errorlevel% NEQ 0 (
GOTO END
)
IF EXIST "%CD%\%LocalFolder%\.git" GOTO SET_MIRROR
IF EXIST "%CD%\.git" (
SET LocalFolder=.
GOTO SET_MIRROR
)
FOR /F "tokens=* USEBACKQ" %%F IN (`ECHO %CD%`) DO (
IF "%%~nF"=="%LocalFolder%" (
SET LocalFolder=.
)
)
ECHO -- 未检测到已下载的蓝图仓库。
GOTO END
:SET_MIRROR
PUSHD %LocalFolder% 1>NUL 2>NUL
REM 设置镜像
CALL "%~dp0一键更新仓库.bat" SETUP_MIRROR
POPD 1>NUL 2>NUL
:END
ENDLOCAL
ECHO  按任意键关闭此窗口...
PAUSE >NUL