在项目列表打开控制台,执行以下代码,打印拉取本页项目代码命令

var list = [];$.each($('.projects-list .project-title a'),(k,v) => {console.log(v.href);list.push('git clone '+v.href)});list.join(';')
// 如果是分组下的项目列表,使用这个
var list = [];$.each($('.groups-list .project-row-contents>a'),(k,v) => {console.log(v.href);list.push('git clone '+v.href)});list.join(';')

温馨提示:分批并行拉取效果更好

克隆代码

@Test
public void fastclone() {
        String diskSymbol = "D";
        String workPath = "/yourpath";
        // git project urls
        List<String> purls = new ArrayList<>();

        FileUtil.mkdir(diskSymbol + ":" + workPath);
        List<List<String>> split = ListUtil.split(purls, RuntimeUtil.getProcessorCount());
        split.parallelStream().forEach(urls -> {
            List<String> commands = new ArrayList<>();
            commands.add(diskSymbol + ":");
            commands.add(String.format("cd %s:%s", diskSymbol, workPath));
            urls.forEach(url -> commands.add("git clone " + url));
            Process p = RuntimeUtil.exec(null, new File("C:/WINDOWS/system32"), "cmd.exe /c " + String.join(" && ", commands));
            System.out.println(RuntimeUtil.getResult(p));
            p.destroy();
        });
}

更新代码

@Test
public void fastpull() {
    String diskSymbol = "D";
    String workPath = "/yourpath";

    File file = new File(diskSymbol + ":" + workPath);
    if (file.exists()) {
        file.mkdirs();
    }
    File[] files = file.listFiles();
    List<String> pdirs = Arrays.stream(Optional.ofNullable(files).orElse(new File[]{})).filter(File::isDirectory).map(File::getAbsolutePath).collect(Collectors.toList());
    List<List<String>> split = ListUtil.split(pdirs, RuntimeUtil.getProcessorCount());
    split.parallelStream().forEach(dirs -> {
            for (String dir : dirs) {
                String[] commands = {"cmd","/c","echo ====== %cd% ====== && git pull"};
                Process p = RuntimeUtil.exec(null, new File(dir), commands);
                System.out.println(IoUtil.read(p.getInputStream()));
                p.destroy();
            }
    });
}

拉取代码python版本

import os
import subprocess
from multiprocessing import Pool
import multiprocessing


def pull_dir(dir):
        commands = ["cmd", "/c", "echo ====== %cd% ====== && git pull"]
        p = subprocess.Popen(commands, cwd=dir, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
        output, _ = p.communicate()
        print(output.decode())

def fastpull():
    diskSymbol = "D"
    workPath = "/xian/refactor"

    directory = diskSymbol + ":" + workPath
    if not os.path.exists(directory):
        os.makedirs(directory)

    dirs = [f for f in os.listdir(directory) if os.path.isdir(os.path.join(directory, f)) and f != "logs" and f != "xian-transfer"]
    pdirs = [os.path.abspath(os.path.join(directory, d)) for d in dirs]

    num_processors = multiprocessing.cpu_count()
    split = [pdirs[i:i+num_processors] for i in range(0, len(pdirs), num_processors)]

    for item in split:
        with Pool() as pool:
            pool.map(pull_dir, item)
    
if __name__ == "__main__" :
    fastpull()