python读取git日志_Python获取gitlab提交历史!

工作中的场景,记录下来分享给大家。

需求

公司私有部署了gitlab保存公司代码,希望在发布系统中可以展示项目在gitlab的提交历史,供发布人员选择提交commit记录并构建对应的docker镜像。

不可行的方案

但是很快我就发现,这个方案是不可行的。

这个库实际上相当于git客户端,它必须把gitlab远程仓库的代码checkout到本地,然后才能执行类似git log命令的方式获取提交日志。

对于一个web应用来说,仅仅为了看一下提交历史就要把代码下载回来,显然是合理的。

建议方案

解决方法是直接访问gitlab的API,它拥有所有的仓库,因此也可以快速的查看提交历史。

首先创建客户端:

import gitlab

client = gitlab.Gitlab(https://gitlab-team.tiantian.com, private_token='XXXXXXXXXX', timeout=2, api_version='3')第一个参数:gitlab服务端地址

private_token:它支持多种登录认证方式,常见的就是帐号+密码 或者 授权一个token(去gitlab中分配)。

timeout:超时时间单位是秒。

api_version:需要看一下gitlab服务端的版本,较旧的服务端版本提供的是v3的API,最新的提供的是v4 API,版本不对应是无法访问通gitlab的。

现在我们要主动发起认证:

client.auth()

然后获取到project:

project = client.projects.get('python/web')

该库整体遵循同样的面向对象以及资源风格,因此获取projects就是projects.get(),列举projects就是projects.list()。

拿到project后,就可以进一步获取其下的commits信息:

commits = project.commits.list(ref_name='master', page=0, per_page=20)

print(commits)

可以筛选特定分支的提交记录,支持翻页(注意第一页page=0)。

最终得到的结果是什么呢?

[, , , , , , , , , ]

没错,若干ProjectCommit对象组成的列表,依旧遵循面向对象风格。

我们可以遍历每个Commit对象,进一步获取其信息:

for c in commits:

print(c.id, c.committer_name, c.created_at, c.message)

输出如下:

e8c0320b7d76888b50b4704c986ab162f729d9d2 owen 2019-02-12T15:39:51.000+08:00 修复BUG

7e0e6a24742fe8dca494aee37dacfff4c5986102 owen 2019-02-01T18:17:46.000+08:00 添加REDIS

e91f06831edaa848ffa9e43d919a91140731af52 owen 2019-01-24T14:02:33.000+08:00 删除调试代码

最后

相信大家已经掌握了该库的使用思路,具体每个对象有什么方法,有哪些属性呢?

你可能感兴趣的:(python读取git日志)