gitlab有太多项目要下载,不要再去一个一个执行git clone了,跟我一起来“偷懒”吧

运用技术

实现过程

step1 创建一个nodejs项目

在d盘创建一个cloneProject文件夹,在文件夹下创建data.js和clone.js文件

step 2 下载gitlab上的项目数据

使用如下链接获取你所有项目的JSON信息

https://gitlab.xxxx.com/api/v4/projects?simple=true&per_page=100&page=1

其中gitlab.xxxx.com代表你的gitlab地址,如果你没获取到项目信息,请确保你的gitlab账号是否拥有足够的权限
当获取到数据后,将数据copy下来,粘贴到step1的项目文件data.js里。链接中的page参数代表页码,改成2看看还有数据吗,如果有就copy下来,再改成3试试,以此类推直到没有为止,代码示例如下:

const projectJson = [
	{
		"id": 1,
        "description": "",
        "name": "xxx",
        "name_with_namespace": "xxx",
        "path": "xxx",
        "path_with_namespace": "xxx",
        "created_at": "2021-08-25T03:51:02.911Z",
        "default_branch": "master",
        "tag_list": [],
        "topics": [],
        "ssh_url_to_repo": "xxx",
        "http_url_to_repo": "xxx",
        "web_url": "xxx",
        "readme_url": "xxx",
        "forks_count": 0,
        "avatar_url": null,
        "star_count": 0,
        "last_activity_at": "xxx",
        "namespace": {
            "id": 1,
            "name": "xxx",
            "path": "xxx",
            "kind": "xxx",
            "full_path": "xxx",
            "parent_id": null,
            "avatar_url": null,
            "web_url": "xxx"
        }
	},
	...
]
module.exports = {
    projectJson
}

⚠️ 如果数据有好几页的,注意不要多加数组符号

step3 创建一个存放gitlab项目的文件目录

根据自己公司的情况进行目录选择,我是在D盘创建了一个名称为project的文件,用来存放gitlab上下载下来的项目

step4 编写代码逻辑

在step1的clone.js文件中写入代码

const { exec } = require('child_process');
const { projectJson } = require('./data.js');
 
async function init() {
    // 循环项目信息
    for(let i = 0; i < projectJson.length; i++) {
    	// 获取项目目录
        const path_with_namespace = projectJson[i].namespace.full_path;
        // 获取项目的gitlab的地址
        const web_url = projectJson[i].http_url_to_repo;
        // 拼接根目录,组装成全局目录
        const projectPath = '~/../../Volumes/Code/project/' + path_with_namespace;
        try {
        	// 执行命令:创建目录 && 打开目录 && git clone
            await execCommand(`mkdir -p ${projectPath} && cd ${projectPath} && git clone ${web_url}`);
            console.log(`克隆 ${path_with_namespace} 成功`);
        } catch (err) {
            console.log("报错了" + err);
        }
    }
}
function execCommand(command) {
    return new Promise((resolve, reject) => {
        try {
            const child = exec(command);
            child.stdout.on('data', (data) => {
                console.log(`stdout: ${data}`);
            });
    
            child.stderr.on('data', (data) => {
                console.log(`stderr: ${data}`);
            });
    
            child.on('close', (code, signal) => {
            	// 监听进程的退出
                console.log(`子进程退出,退出码: ${code}${signal}`);
                if(code == 0) {
                    resolve(code);
                }
            });
        } catch (err) {
            reject(err);
        }
    })
}
init();
step5 执行nodejs命令

打开cmd命令行,打开到step1的项目目录,输入命令:

node clone.js

按回车,你可以看到自动clone项目了,接下来就是耐心等待项目的下载了

小结

如果碰到任何问题可以来给我私信留言哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值