1
0
mirror of https://github.com/DSPBluePrints/FactoryBluePrints.git synced 2026-03-22 06:53:22 +08:00
Files
FactoryBluePrints/一键更新仓库.bat
Soar Qin b64c748cce 新的一键更新脚本
* 无需下载仓库即可完成全流程:
  * 下载MinGit
  * 设置镜像并克隆仓库
  * 更新仓库
* 可手动切换镜像
2026-03-03 17:24:23 +08:00

401 lines
10 KiB
Batchfile
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@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