windows下bat脚本git pull批处理

贺飞星
2023-12-01

一. 场景说明
    公司有很多项目,我把它们都放在本地同一个磁盘目录下,使用bat脚本,批量git pull拉取每一个项目的最新代码。

二. git_pull.bat脚本

@echo off    
start cmd /K 
for /D %%i in (F:\zzxypm\Cloud\dmp,F:\zzxypm\Cloud\pass,F:\zzxypm\Cloud\server,F:\zzxypm\Cloud\web,F:\zzxypm\Credit\react,F:\zzxypm\Credit\server,F:\zzxypm\Credit\server-web,F:\zzxypm\csci\csci,F:\zzxypm\lbmp\csci-activiti,F:\zzxypm\lbmp\react,F:\zzxypm\lbmp\server,F:\zzxypm\lbmp\vue,F:\zzxypm\maven-lib\maven-lib,F:\zzxypm\MSME\amalgam7,F:\zzxypm\MSME\inox,F:\zzxypm\MSME\invar,F:\zzxypm\MSME\tial,F:\zzxypm\Sign\console_server,F:\zzxypm\Sign\console_web,F:\zzxypm\Sign\sign_server,F:\zzxypm\Sign\sign_wx,F:\zzxypm\zzxypm,F:\zzxypm\zzxypm\db\zzxypm-db
) do cd %%i & git pull
cd F:\zzxypm    
ECHO %date% %time% >>update.txt
pause

我这边for循环是直接定位到每一个项目的 .git所在目录中。
可以通过下面的代码获取所有 .git 所在目录全路径。

    /**
     * 递归查找含有 .git 的目录
     */
    @Test
    public void recursionDiskDirectory(){
        List<File> fileList = new ArrayList<>();
        fileList = getAllFilePaths(new File("F:\\zzxypm"),fileList);
        StringBuilder sb = new StringBuilder();
        for(File f:fileList){
            if (".git".equals(f.getName())){
                sb.append(f.getParent()).append(",");
            }
        }
        sb.deleteCharAt(sb.length()-1);
        System.out.println(sb);
    }

    private static List<File> getAllFilePaths(File filePath, List<File> fileList){
        File[] files = filePath.listFiles();
        if(files == null){
            return fileList;
        }
        for(File f:files){
            if(f.isDirectory()){
                fileList.add(f);
                getAllFilePaths(f,fileList);
            }
        }
        return fileList;
    }

参考链接:
https://www.jianshu.com/p/397e62ef21fb

https://my.oschina.net/mdongfeng/blog/209430

 类似资料: