文章目录
运用技术
- nodejs【安装教程】
实现过程
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项目了,接下来就是耐心等待项目的下载了
小结
如果碰到任何问题可以来给我私信留言哦
2762

被折叠的 条评论
为什么被折叠?



