前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 批量获取 gitlab 项目代码

Python 批量获取 gitlab 项目代码

作者头像
为为为什么
发布2022-08-06 16:58:33
9600
发布2022-08-06 16:58:33
举报
文章被收录于专栏:又见苍岚

现在越来越多的公司采用 gitlab 来管理代码。gitlab有个问题,免费版不支持全局代码搜索,这很麻烦。如果把代码全部clone到本地就可以方便的进行各种搜索了。

思路

gitlab 有提供 api 来获取 projecct 列表,那么就可以遍历这个列表来做git clone

参见:https://docs.gitlab.com/ee/api/projects.html#list-all-projects

生成 token

使用 Gitlab API 需要生成私有 token

  • token的生成方法:
  • Token 仅在生成时可见一次,注意保存

脚本

注意:gitlab 的 api 每次最多只能获取100个projecct的信息。这个脚本带翻页功能,可以支持100个以上的项目。

代码语言:javascript
复制
# -*- coding: UTF-8 -*-
 
# 在Python3.0测试通过
# 需要在gitlab里面新建一个AccessToken填入gitlabToken
 
import sys
if sys.version_info < (3, 0):
    import urllib
else:
    from urllib.request import urlopen
 
import json
import subprocess, shlex
import time
import os
 
gitlabAddr  = '201.1.2.115:8099'         #git的地址
gitlabToken = 'Nzyg92-123456aa4ay__y'    #gitlab的token,在gitlab的设置里有生产临时token
 
for index in range(10):
    url     = "http://%s/api/v4/projects?private_token=%s&per_page=100&page=%d&order_by=name" % (gitlabAddr, gitlabToken, index)
    print(url)
    
    if sys.version_info < (3, 0):
        allProjects     = urllib.urlopen(url)
    else:
        allProjects     = urlopen(url)
        
    allProjectsDict = json.loads(allProjects.read().decode(encoding='UTF-8'))
    if len(allProjectsDict) == 0:
        break
    for thisProject in allProjectsDict: 
        try:
            thisProjectURL  = thisProject['ssh_url_to_repo']
            thisProjectPath = thisProject['path_with_namespace']
            print(thisProjectURL + ' ' + thisProjectPath)
            
            if os.path.exists(thisProjectPath):
                command     = shlex.split('git -C "%s" pull' % (thisProjectPath))
            else:
                command     = shlex.split('git clone %s %s' % (thisProjectURL, thisProjectPath))
            
            resultCode  = subprocess.Popen(command)
            
            time.sleep(0.5)
        except Exception as e:
            print("Error on %s: %s" % (thisProjectURL, e.strerror))

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年2月7日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 思路
  • 生成 token
  • 脚本
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档