写点什么

批量下载 gitlab 代码

用户头像
阿呆
关注
发布于: 48 分钟前
批量下载gitlab代码

前言

今天工作中,一个同事突然跑过来说,帮我写个脚本,来下载一批 gitlab 上的代码,我心里一想,手头不是正好有一个现成的脚本么,直接改一下就好了。

实现

实现分为两步:

  1. 通过 gitlab 的 api 拿到仓库的列表;

  2. 循环 clone 每个仓库;

gitlab api 获取仓库列表

1、 首先我们需要知道仓库的 token,通过 token 来请求 gitlab api,来拿到这个 token 有权限的仓库列表,token 可以在 gitlab 的个人设置中进行创建;

创建gitlab个人token

2、在请求 api 时,需要使用 token 进行验证,这块需要在 header 中完成,我们构建的 header 应该如下

headers = {"PRIVATE-TOKEN": token, "Authorization": "Bearer {0}".format(token)}
复制代码

3、调用 api 获取仓库的信息,这块获取的是仓库的所有信息

def get_project_list(page, per_page=100):    """    获取项目列表    """    try:        request = requests.get(api_url + "?page={0}&per_page={1}".format(page, per_page), headers=headers, verify=True)        return json.loads(request.content.decode("utf-8"))    except:        return []
复制代码

4、因 gitlab api 的限制,每次获取的数据条数最大为 100 条,所以我们需要循环才能获取到所有数据。


git clone 所有仓库

1、直接将本机的 ssh 公钥放到 gitlab 上,用 ssh 方式 clone 代码

gitlab ssh公钥添加页面

2、循环 clone 代码

def clone_code(url):    """    在当前目录下直接clone代码    """    print("Begin clone url: ", url)    res = subprocess.Popen(shlex.split('git clone {}'.format(url)), shell=False, stdout=None)    print("Cone result", res)
复制代码


参考链接

发布于: 48 分钟前阅读数: 5
用户头像

阿呆

关注

坚守准则,认真做事。 2018.05.22 加入

360服务器端资深工程师 北京航空航天大学计算机研究生 北京工业大学计算机本科

评论

发布
暂无评论
批量下载gitlab代码