如何批量获取gitlab里面所有项目的代码

背景

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

公司越来越大,项目越来越多,怎么办呢?自己写个脚本来批量的git clone吧。

思路

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

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

脚本

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


# -*- 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'
gitlabToken = 'Nzyg92-123456aa4ay__y'

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['http_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))

脚本使用方法

这是一个python脚本,可以另存为gitall.py比如。然后电脑上安装一下python。再写个批处理文件updategit.bat包含一条命令:python gitall.py。这样以后双击updategit.bat就可以使用了。

第一次使用的时候有可能会弹框要求输入gitlab的账号密码。

 

  • 8
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 23
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值