• 批处理 更新 svn git hg


    @echo off
    Setlocal enabledelayedexpansion
    ::CODER BY Administrator POWERD BY iBAT 1.6
    ::设置svn默认安装位置以及需要调用的应用程序
    set workPath=C:Program FilesTortoiseSVNin
    set exeName=TortoiseProc.exe
    echo Svn程序路径 C:Program FilesTortoiseSVNin
    ::需要用户判断自己当前电脑svn的客户端是否也在这个目录下边,如果没有,使用用户录入的目录
    set /p input=Svn程序路径是否正确 (Y or N):
    if /i "%input%"=="Y" goto Y
    if /i "%input%"=="N" goto N
    :N
    ::用户录入正确的目录后,跳转到处理过程
    set /p workPath=Svn安装目录=
    goto Y
    :Y
    echo 数据处理中
    ::使用for循环从 dir 获取到字符串中获取文件夹名字
    :: dir /ad-s/b 表示只取目录,并且不是系统文件夹,使用空格模式显示
    for /f "delims=" %%i in ('"dir /ad-s/b "') do (
    echo 正在查询文件【%%i】是否包含svn信息
    ::判断是否是svn文件夹
    if exist "%~dp0%%i.svn" (
    echo 正在更新项目 %%i
    ::调用更新命令
    "%workPath%\%exeName%" /command:update /path:%%i /notempfile /closeonend:1)
    )
    echo 更新完成
    pause
    View Code
    先上代码,如果你不了解bat,可以先复制下来,然后再去学习。
    
    
    
    @echo off           //这句是不在cmd显示下面的命令,加个@是不显示自身的命令
    
    for /f %%i in (proall.txt) do (         
    echo 更新 %%i
    TortoiseProc.exe /command:update  /path:D:work\%%i /closeonend:2
    echo 完成%%i 更新
    echo.
    )
    
    exit12345678910
    
     
    还有那个proall.txt,其实没什么,就是你要更新的项目,或者项目下的某一个文件夹
    
    
    
    项目1
    项目2 
    项目3
    项目4排期表
    项目4文档
    项目8
    1234567
    
     
    接下来解释一下: 
    1、for /f %%i in (*) do()
    
    
    这句意思是使用for循环来获取项目名,然后执行do里面的命令,for /f是用来读取文本的命令,文本的每一行表示一个元素,空行就跳过
    其次%%i表示一个临时的i,表示proall.txt里面的某一个项目名称,而且是局部变量
    上面的是在proall.txt里面读取要更新的项目名,如果项目多了,只要修改proall.txt就可以了,当然你不嫌麻烦也可以用“数组”,写在bat里面。
    
    
    2、echo 更新%%i
    
    
    只是加个提示,会提示更新项目1、更新项目2
    
    
    3、 TortoiseProc.exe /command:update  /path:D:work\%%i /closeonend:2 这一句是最主要的
    
    
    TortoiseProc.exe表示执行TortoiseSVN的GUI程序
    update,也就是执行更新项目的命令
    接下来的path表示要更新哪个项目,我放在了D:work目录下,会通过从proall.txt里面读取的来依次更新
    closeonend:2表示更新时如果没发生错误和冲突则自动关闭对话框
    
    
    4、echo 完成%%i 更新
    
    
    也是加个提示,完成项目1 更新等等
    
    
    5、echo.
    
    
    如果你眼神还可以就会发现echo后面有个.,记住是紧挨着echo,没有空格,表示换行
    
    
    6、exit
    
    
    表示更新完的话自动关闭cmd命令窗口,当然如果你想看下更新了什么,可以改成pause
    
    ---------------------
    
    本文来自 S_clifftop 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/S_clifftop/article/details/81079221?utm_source=copy 
    View Code

    # 批量更新多个Git库

    :: gitpullall.bat
    @ECHO OFF
    SETLOCAL ENABLEEXTENSIONS

    SET MYGIT="D:Program FilesGitingit.exe"
    SET MYHG="D:Program FilesTortoiseHghg.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

    # 打包一个或多个Git库

    :: packdir.bat
    @ECHO OFF
    SETLOCAL ENABLEEXTENSIONS
     
    SET MY7Z="D:Program Files7-Zip7z.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
    View Code

    如果需要批量恢复所有子项目目录下的代码,运行gitcheckoutall.bat批处理文件:

    :: gitcheckoutall.bat
    @ECHO OFF
    SETLOCAL ENABLEEXTENSIONS
     
    SET MYGIT="D:Program FilesGitingit.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
    View Code
    @echo off
    Setlocal enabledelayedexpansion
    SET MYGIT="C:Program FilesSlikSvninsvn.exe"
    SET MYHG="D:Program FilesTortoiseHghg.exe"
    for /f "delims=" %%i in ('"dir /ad-s/b "') do (
    echo 正在查询文件【%%i】是否包含svn信息
        IF EXIST "%%i.svn" (
            CD /D "%%i"
            echo 正在更新项目 %%i
            %MYGIT% up
            CD /D ..
        ) ELSE IF EXIST "%%i.hg" (
            CD /D "%%X"
            ECHO ===== hg pull %%i
            %MYGIT% pull -u
            CD /D ..
        ) ELSE ECHO ..... 不包含 %%i
    )
    echo 更新完成
    pause
    git branch -r | grep -v '->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
    git fetch --all
    git pull --all
    https://stackoverflow.com/questions/10312521/how-to-fetch-all-git-branches
  • 相关阅读:
    20220330 08:00:01
    20220330 08:00:01
    20220328 08:00:01
    20220329 08:00:01
    【Tokio】TCP 服务器
    【Tokio】echo 服务器
    【Tokio】有界多对一通道
    【Tokio】一对多通道
    【Tokio】异步写入文件
    【Tokio】UDP 服务器
  • 原文地址:https://www.cnblogs.com/marklove/p/9756315.html
Copyright © 2020-2023  润新知