return to index

notices (Misc)


How to sync github code base automatically

C:\Users\YOUR USER NAME\AppData\Local\GitHubDesktop\app-3.5.4\resources\app\git\cmd

@echo off
setlocal enabledelayedexpansion

rem === 根目錄根據實際情況修改 ===
set ROOT=%CD%

echo.
echo ========================================
echo  Sync all repos under %ROOT%
echo  (local changes will be DISCARDED)
echo ========================================
echo.

rem ---------- 掃描兩層目錄:%ROOT%\xxxxx\ -------------
if exist "%ROOT%\.git\" call :UPDATE "%ROOT%"

for /d %%P in ("%ROOT%\*") do (
    if exist "%%P\.git\" (
        call :UPDATE "%%P"
    ) else (
        REM 再往下一層找
        for /d %%Q in ("%%P\*") do (
            if exist "%%Q\.git\" call :UPDATE "%%Q"
        )
    )
)

REM for /r "%ROOT%" %%G in (.git) do (
    REM call :UPDATE "%%~dpG.."
REM )

echo.
echo =========  ALL DONE  =========
pause
exit /b


rem ===== 子程序:對單一 repo 做強制同步 =====
:UPDATE
set REPO=%~1
echo --- Updating !REPO! ---
pushd "!REPO!" || exit /b

set GIT=C:\Users\xxxx\AppData\Local\GitHubDesktop\app-3.5.4\resources\app\git\cmd\git.exe

rem 1) 下載遠端最新(含刪除的分支)-------------
"%GIT%" fetch --prune

rem 2) 找遠端預設分支 (main / master) ------------
for /f %%B in ('"%GIT%" symbolic-ref --short refs/remotes/origin/HEAD') do (
    for /f %%C in ("%%B") do set BR=%%~nxC
)

rem 3) 強制對齊,拋棄本地改動 --------------------
"%GIT%" reset --hard origin/!BR! >nul
REM "%GIT%" clean -fdx >nul
REM "%GIT%" clean -fdx -e *.bat
"%GIT%" clean -fdx -e sync_all_repo.bat >nul

popd
echo     done.
echo.
exit /b

set GIT=C:\Users\xxxx\AppData\Local\GitHubDesktop\app-3.5.4\resources\app\git\cmd\git.exe
"%GIT%" clean -fdx -e sync_all_repo.bat >nul

back to top