批量更新和打包多個Git庫目錄
阿新 • • 發佈:2019-01-26
# 批量更新多個Git庫
建立一個專門存放git庫專案的目錄,例如D:\git。project專案的本地git庫目錄為D:\git\project\.git。
更新(git pull)D:\git目錄下的所有Git/Hg專案,在該目錄下執行gitpullall.bat批處理檔案:
:: gitpullall.bat @ECHO OFF SETLOCAL ENABLEEXTENSIONS SET MYGIT="D:\Program Files\Git\bin\git.exe" SET MYHG="D:\Program Files\TortoiseHg\hg.exe" FOR /D %%X IN (*) DO ( IF EXIST "%%X\.git\" ( CD /D "%%X" ECHO ===== git pull %%X %MYGIT% pull --recurse-submodules=yes --ff-only --all --progress CD /D .. ) ELSE IF EXIST "%%X\.hg\" ( CD /D "%%X" ECHO ===== hg pull %%X %MYGIT% pull -u CD /D .. ) ELSE ECHO ..... Skipped %%X ) :bye PAUSE ENDLOCAL
如果只需要fetch所有remote源,執行gitfetchall.bat批處理檔案:
:: gitfetchall.bat @ECHO OFF SETLOCAL ENABLEEXTENSIONS SET MYGIT="D:\Program Files\Git\bin\git.exe" FOR /D %%X IN (*) DO ( IF EXIST "%%X\.git\" ( CD /D "%%X" ECHO ===== git fetching %%X %MYGIT% fetch --all --recurse-submodules=yes -v --progress CD /D .. ) ELSE ECHO ..... Skipped %%X ) :bye PAUSE ENDLOCAL
# 打包一個或多個Git庫
:: packdir.bat @ECHO OFF SETLOCAL ENABLEEXTENSIONS SET MY7Z="D:\Program Files\7-Zip\7z.exe" IF "%1" == "" ( FOR /D %%X IN (*) DO ( IF EXIST "%%X\.git\" ( DEL "%%X.7z" 1>NUL 2>&1 ECHO ===== Packing %%X\.git\ to %%X.7z %MY7Z% a -mx9 "%%X.7z" "%%X\.git\" 1>NUL ) ELSE ECHO ..... Skipped %%X ) ) ELSE ( DEL "%1.7z" 1>NUL 2>&1 IF EXIST "%1\.git\" ( ECHO ===== Packing %1\.git\ to %1.7z %MY7Z% a -mx9 "%1.7z" "%1\.git\" 1>NUL ) ELSE FOR /D %%X IN (*) DO ( IF EXIST "%%X\.git\" ( ECHO ===== Packing %%X\.git\ to %1.7z %MY7Z% a -mx9 "%1.7z" "%%X\.git\" 1>NUL ) ELSE ECHO ..... Skipped %%X ) ) :bye PAUSE ENDLOCAL
在D:\git目錄下帶引數project執行packdir.bat批處理檔案,則僅將project\.git\目錄打包為project.7z。
如果引數不是一個子目錄名,則將所有子專案的.git\目錄打為一個整包,包名為“引數.7z”。
如果不帶引數,則對當前目錄下所有專案的.git\目錄分別打包,包名為對應“子目錄名.7z”,包內儲存路徑"子目錄名\.git\"。將打包檔案解壓後進入.git\上級專案目錄,執行"git checkout -f --"即可恢復該專案程式碼。
如果需要批量恢復所有子專案目錄下的程式碼,執行gitcheckoutall.bat批處理檔案:
:: gitcheckoutall.bat
@ECHO OFF
SETLOCAL ENABLEEXTENSIONS
SET MYGIT="D:\Program Files\Git\bin\git.exe"
FOR /D %%X IN (*) DO (
IF EXIST "%%X\.git\" (
CD /D "%%X"
ECHO ===== git checkout %%X
%MYGIT% checkout --recurse-submodules -f --
CD /D ..
) ELSE ECHO ..... Skipped %%X
)
:bye
PAUSE
ENDLOCALSETLOCAL ENABLEEXTENSIONS