📚 开源资源分享——颜佐光的个人书架
✉️ 联系站长
书架 / Windows / bat

Bat循环处理git

2021-05-06 15:34 · 约 2,241 字 · 浏览 2,003 次bat

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
← 返回《Windows》目录书架 →