Python实现一键从Gitlab上拉取文件夹下多个项目代码到本地

公司Gitlab上有一个项目文件夹,下面有20多个Git项目,要把它们一个个拉取下来比较费时,所以用Python写了一个脚本。

脚本代码

python 复制代码
import requests
from git import Repo
import os

# GitLab地址
gitlab = "https://xxxx/api/v4/projects"

# token,在GitLab上面申请Access Token得到
token = "xxxx"

# 分页参数,一次性干他妈的50个,绝对查完
page = 1
per_page = 50

# 最后请求的url
url = "{}?private_token={}&page={}&per_page={}".format(gitlab, token, page, per_page)

# 项目存放地址
parentPath = "D:\\Projects\\MyPAth"

# 拉取代码后要切换的分支,是master就不用切换了
branch = "master"

def requestGitProjects():
    # 请求
    response = requests.get(url)

    # 记录每个项目文件夹下的项目数量,最后判断对不对
    backendCount = 0
    frameworkCount = 0
    mockCount = 0
    if response.status_code == 200:
        projects = response.json()
        for project in projects:
            # 得到git地址
            http_url = project["http_url_to_repo"]
            # 得到git项目名称
            name = project["path"]
            print(http_url)
            path = parentPath + "\\" + name
            # 去做Git操作
            gitPull(http_url, path)
        print("解析完成。")
    else:
        print("请求失败:", response.status_code)


def gitPull(gitUrl, path):
    if os.path.exists(path):
        print("文件夹已存在,跳过:", path)
        return
    # 拉代码和切换分支,异常说明没有内容或者没有分支,那就不管了
    try:
        repo = Repo.clone_from(gitUrl, path)
        if "master" != branch:
            repo.git.checkout(branch)
    except Exception as e:
        pass


# 执行代码
requestGitProjects()

Python环境准备

shell 复制代码
# 脚本代码路径
cd xxx

# 创建虚拟环境
python -m venv venv

# 激活虚拟环境,此处为Windows系统,如果是Linux则是二进制文件
\venv\Scripts\activate.bat

# 激活后则进入虚拟环境,安装所需要的依赖
(venv) pip install requests
(venv) pip install gitpython

# 运行代码
(venv) python demo.py
相关推荐
Java后端的Ai之路25 分钟前
【Python 教程15】-Python和Web
python
Victor3562 小时前
https://editor.csdn.net/md/?articleId=139321571&spm=1011.2415.3001.9698
后端
冬奇Lab2 小时前
一天一个开源项目(第15篇):MapToPoster - 用代码将城市地图转换为精美的海报设计
python·开源
Victor3562 小时前
Hibernate(89)如何在压力测试中使用Hibernate?
后端
灰子学技术4 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
二十雨辰4 小时前
[python]-AI大模型
开发语言·人工智能·python
Yvonne爱编码4 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Gogo8164 小时前
BigInt 与 Number 的爱恨情仇,为何大佬都劝你“能用 Number 就别用 BigInt”?
后端
fuquxiaoguang4 小时前
深入浅出:使用MDC构建SpringBoot全链路请求追踪系统
java·spring boot·后端·调用链分析
前端摸鱼匠5 小时前
YOLOv8 环境配置全攻略:Python、PyTorch 与 CUDA 的和谐共生
人工智能·pytorch·python·yolo·目标检测