写在前面
本文主要介绍如何通过Python脚本来批量获取GitLab上的项目。笔者参考了互联网上的一些版本,做了增强:
1、通过选择文件夹的方式,可以选择待克隆项目要存放的位置
2、可以克隆当前用户下的所有项目,也可以根据group进行克隆(结构和GitLab一样)
3、如果待克隆的项目已经存在,则进行更新
这篇文章比较适合收藏
,因为等到哪天你真正需要用到的时候,开箱即用。
一、场景描述
笔者遇到了一个项目,该项目目前处于维护、升级的过程中。由于前期业务发展迅速,造成微服务滥用(各种复制、拆分),项目多达50多个。本地想要启动一下项目,复杂一点儿的业务需要8-9个服务。由于之前拆分的不是很合理,现在需要去合并项目,需要去下载涉及到的项目来梳理一下交互逻辑。
50多个项目,一个一个克隆?有没有什么办法,可以去批量获取项目,还能批量更新。
因为有一些公共模块,别人做了修改,你需要去实时拉取最新代码。经查询资料,果不其然,GitLab提供了一套REST API用来操作项目。
话不多少,来吧,上代码。代码比较简单,不进行赘述。
二、具体步骤
1.环境说明
名称 | 说明 |
---|---|
Windows版本 | Win10/X64 |
Python版本 | 3.12 |
VSCode版本 | 1.75.1 |
2.代码
新建一个clone.py,内容如下:
## ==============================================
# 说明:
# gitLab需要配置成自己的参数
# groupName为空则拉取所有项目,否则拉取group下面的项目
#
# @author QiuXianbao
# ==============================================
import tkinter as tk
from tkinter import filedialog
from urllib.request import urlopen
import json
import subprocess
import shlex
import os
# 配置gitLab
gitlabAddr = '192.168.41.130'
gitlabPrivateToken = 'z3CZUzBXAKCy-2m3Labc'
groupName = 'my-group'
root = tk.Tk()
root.withdraw()
folderPath = filedialog.askdirectory()
if groupName == '':
url = "http://%s/api/v4/projects?private_token=%s&per_page=1000&order_by=name" % (gitlabAddr, gitlabPrivateToken)
else:
url = "http://%s/api/v3/groups/%s/projects?private_token=%s&per_page=1000&order_by=name" % (gitlabAddr, groupName, gitlabPrivateToken)
print(url)
allProjects = urlopen(url)
allProjectsDict = json.loads(allProjects.read().decode(encoding='UTF-8'))
for thisProject in allProjectsDict:
try:
thisProjectURL = thisProject['http_url_to_repo']
thisProjectPath = thisProject['path_with_namespace']
print(thisProjectURL + ' ' + thisProjectPath)
filePath = folderPath + "/" +thisProjectPath
if os.path.exists(filePath):
os.system('cd %s && git pull' % filePath)
else:
command = shlex.split('git clone %s %s' %(thisProjectURL, thisProjectPath))
resultCode = subprocess.Popen(command, cwd=folderPath)
except Exception as e:
print("Error on %s: %s" % (thisProjectURL, e.strerror))
在终端输入执行命令:python clone.py,然后选择项目要存放的文件夹
OK!可以去喝杯茶了,静享美好时光。
说明:关于gitlabPrivateToken是什么,可以参考系列文章
三、参考资料
写在后面
如果本文内容对您有价值或者有启发的话,欢迎点赞、关注、评论和转发。您的反馈和陪伴将促进我们共同进步和成长。
系列文章
【GitLab】-HTTP Basic: Access denied.remote:You must use a personal access token