From b64c748cce0fafd8a2c69cf9c870815818813bd7 Mon Sep 17 00:00:00 2001 From: Soar Qin Date: Tue, 3 Mar 2026 17:24:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E7=9A=84=E4=B8=80=E9=94=AE=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 无需下载仓库即可完成全流程: * 下载MinGit * 设置镜像并克隆仓库 * 更新仓库 * 可手动切换镜像 --- 一键更新仓库.bat | 400 +++++++++++++++++++++++++++++++++++++++++++++++ 切换镜像.bat | 43 +++++ 2 files changed, 443 insertions(+) create mode 100644 一键更新仓库.bat create mode 100644 切换镜像.bat diff --git a/一键更新仓库.bat b/一键更新仓库.bat new file mode 100644 index 0000000..5efd253 --- /dev/null +++ b/一键更新仓库.bat @@ -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 diff --git a/切换镜像.bat b/切换镜像.bat new file mode 100644 index 0000000..b073e2e --- /dev/null +++ b/切换镜像.bat @@ -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