Bat循环处理git
我要对公司的git服务器做一个代码备份,那么我需要定义1个备份目录,在这个目录中包含了很多git项目也有未嵌入的git项目,,目录层级不等,目录数量未知。于是定义了如下几个bat文件用于处理git同步。
查看所有远程地址
gitremote.bat
@ECHO OFF
SET INIT_PATH=%~dp0
CALL :pull %INIT_PATH%
pause
ECHO ON
@goto:eof
:pull
CD "%1"
FOR /D %%s IN (*) DO (
IF EXIST %1\%%s\.git (
echo %1\%%s
CD "%1\%%s"
git remote -v
CD "%1"
) ELSE IF EXIST %1\%%s\.idea (
echo %1\%%s\.idea
) ELSE IF EXIST %1\%%s (
CALL :pull %1\%%s
) ELSE (
goto:eof
)
)
CD "%1"
goto:eof
从远程拉取代码地址
gitpull.bat
@ECHO OFF
SET INIT_PATH=%~dp0
CALL :pull %INIT_PATH%
pause
ECHO ON
@goto:eof
:pull
CD "%1"
FOR /D %%s IN (*) DO (
IF EXIST %1\%%s\.git (
CD "%1\%%s"
echo %1\%%s
git fetch --all
git pull --all
CD "%1"
) ELSE IF EXIST %1\%%s\.idea (
echo %1\%%s\.idea
) ELSE IF EXIST %1\%%s (
CALL :pull %1\%%s
) ELSE (
goto:eof
)
)
CD "%1"
goto:eof
提交到远程库
gitpush.bat
@ECHO OFF
SET INIT_PATH=%~dp0
CALL :pull %INIT_PATH%
pause
ECHO ON
@goto:eof
:pull
CD "%1"
FOR /D %%s IN (*) DO (
IF EXIST %1\%%s\.git (
CD "%1\%%s"
echo %1\%%s
git fetch --all
git pull --all
git add .
git commit -m "auto commit"
git push
CD "%1"
) ELSE IF EXIST %1\%%s\.idea (
echo %1\%%s\.idea
) ELSE IF EXIST %1\%%s (
CALL :pull %1\%%s
) ELSE (
goto:eof
)
)
CD "%1"
goto:eof
指令详情
注意不要把本文件执行保存,包含中文可能会导致不能执行。
:: ECHO OFF设置不显示指令,@符号表明不显示当前指令
@ECHO OFF
:: 设置INIT_PATH变量为当前目录
SET INIT_PATH=%~dp0
:: 调用 :pull 函数,并传入参数 INIT_PATH
CALL :pull %INIT_PATH%
:: 暂停显示,用于双击bat时显示结果
pause
:: 恢复显示指令
ECHO ON
:: 设置程序停止执行
@goto:eof
:: 定义:pull函数
:pull
:: 进入到参数1的目录
CD "%1"
:: 循环当前目录的子目录,子目录名称为 %%s , /D 代表循环当前目录的子目录
FOR /D %%s IN (*) DO (
IF EXIST %1\%%s\.git (
:: 判断是否存在 .git 目录,存在则执行 git相关指令
:: 进入代码目录
CD "%1\%%s"
:: 显示代码目录
echo %1\%%s
:: 获取git所有远程分支版本
git fetch --all
:: 拉取git所有远程分支
git pull --all
:: 添加修改文件到当前分支
git add .
:: 提交当前分支
git commit -m "auto commit"
:: 提交到远程目录
git push
:: 进入到当前目录的父目录
CD "%1"
) ELSE IF EXIST %1\%%s\.idea (
:: 判断是否存在.idea目录,存在则不进行任何处理,仅仅打印当前目录
echo %1\%%s\.idea
) ELSE IF EXIST %1\%%s (
:: 判断是否存在目录,存在目录则进行递归循环处理
CALL :pull %1\%%s
) ELSE (
:: 结束执行,防止死循环
goto:eof
)
)
:: 进入父目录
CD "%1"
:: 结束函数执行
goto:eof
本文由 创作,采用 知识共享署名4.0 国际许可协议进行许可。本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为: 2021/05/06 07:34