【GitLab】-批量克隆更新GibLab项目脚本(Python版本)

写在前面

  本文主要介绍如何通过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中一次性克隆一个组的所有项目


写在后面

  如果本文内容对您有价值或者有启发的话,欢迎点赞、关注、评论和转发。您的反馈和陪伴将促进我们共同进步和成长。


系列文章

【GitLab】-HTTP Basic: Access denied.remote:You must use a personal access token

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值