一. 场景说明
公司有很多项目,我把它们都放在本地同一个磁盘目录下,使用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;
}