(转)通过gitlab统计git提交的代码量
git的代码量大多数都是根据命令行统计,或者根据第三方插件统计。但是都不满足我的需求,因为我们代码都由gitlab管理,于是想到了通过gitlab暴露出来的接口获取数据。
第一步,生成私钥
登录你的gitlab申请私钥private_token

第二步,获取当前用户可见的所有项目(即使用户不是成员)
接口地址:gitlab的地址/api/v4/projects/?private_token=xxx
返回参数:
[{
"id":219,
"description":"",
"name":"share-5.2.3.8",
"name_with_namespace":"develop / share-5.2.3.8",
"path":"share-5.2.3.8",
"path_with_namespace":"develop/share-5.2.3.8",
"created_at":"2019-07-10T19:59:29.855+08:00",
"default_branch":"master",
"tag_list":[
],
"ssh_url_to_repo":"git@127.0.0.1:develop/share-5.2.3.8.git",
"http_url_to_repo":"http://127.0.0.1/develop/share-5.2.3.8.git",
"web_url":"http://127.0.0.1/develop/share-5.2.3.8",
"readme_url":"http://127.0.0.1/develop/share-5.2.3.8/blob/master/README.md",
"avatar_url":null,
"star_count":0,
"forks_count":0,
"last_activity_at":"2019-07-11T02:53:44.831+08:00",
"_links":{
"self":"http://127.0.0.1/api/v4/projects/219",
"issues":"http://127.0.0.1/api/v4/projects/219/issues",
"merge_requests":"http://127.0.0.1/api/v4/projects/219/merge_requests",
"repo_branches":"http://127.0.0.1/api/v4/projects/219/repository/branches",
"labels":"http://127.0.0.1/api/v4/projects/219/labels",
"events":"http://127.0.0.1/api/v4/projects/219/events",
"members":"http://127.0.0.1/api/v4/projects/219/members"
},
"archived":false,
"visibility":"private",
"resolve_outdated_diff_discussions":false,
"container_registry_enabled":true,
"issues_enabled":true,
"merge_requests_enabled":true,
"wiki_enabled":true,
"jobs_enabled":true,
"snippets_enabled":true,
"shared_runners_enabled":true,
"lfs_enabled":true,
"creator_id":14,
"namespace":{
"id":17,
"name":"develop",
"path":"develop",
"kind":"group",
"full_path":"develop",
"parent_id":null
},
"import_status":"none",
"open_issues_count":0,
"public_jobs":true,
"ci_config_path":null,
"shared_with_groups":[
],
"only_allow_merge_if_pipeline_succeeds":false,
"request_access_enabled":false,
"only_allow_merge_if_all_discussions_are_resolved":false,
"printing_merge_request_link_enabled":true,
"merge_method":"merge",
"permissions":{
"project_access":null,
"group_access":{
"access_level":40,
"notification_level":3
}
}
},...]
参数这么多我们从中抽取出需要的部分
[{
"id":219,
"name":"share-5.2.3.8",
"name_with_namespace":"develop / share-5.2.3.8",
"path_with_namespace":"develop/share-5.2.3.8",
"http_url_to_repo":"http://127.0.0.1/develop/share-5.2.3.8.git",
"created_at":"2019-07-10T19:59:29.855+08:00",
"_links":{
"repo_branches":"http://127.0.0.1/api/v4/projects/219/repository/branches",
},
},...]
第三步,遍历项目,根据项目id获取分支列表
接口地址:http://gitlab地址/api/v4/projects/项目id/repository/branches?private_token=xxx
传入参数:无
返回参数:
[{
"name":"master",
"commit":{
"id":"d1b9747ba994f19fb6afb069b3751bd3cf21rrrr",
"short_id":"d1b974123",
"title":"添加仓库",
"created_at":"2019-07-11T02:53:32.000+08:00",
"message":"添加仓库",
"author_name":"admin",
"author_email":"admin@gmail.com",
"authored_date":"2019-07-11T02:53:32.000+08:00",
"committer_name":"admin",
"committer_email":"admin@gmail.com",
"committed_date":"2019-07-11T02:53:32.000+08:00",
"parent_ids":[
"25cf5c94b9ddc762bd2be73e1e542ebd26adadf"
]
},
"merged":false,
"protected":true,
"developers_can_push":false,
"developers_can_merge":false
},...]
第四步,遍历分支,根据分支name获取commits
注意,当title和message
接口地址:
http://gitlab地址/api/v4/projects/项目id/repository/commits?ref_name=master&private_token=xxx
[{
"id":"d1b9747ba994f19fb6afb069b3751bd3cf21ag32",
"author_name":"admin",
"authored_date":"2019-07-11T02:53:32.000+08:00",
"committer_email":"admin@gmail.com",
"committed_date":"2019-07-11T02:53:32.000+08:00",
"created_at":"2019-07-11T02:53:32.000+08:00",
"author_email":"admin@gmail.com",
"short_id":"d1b9747b",
"title":"添加仓库",
"parent_ids":[
"25cf5c94b9ddc762bd2be73e1e542ebd26aafd"
],
"message":"添加仓库 ",
"committer_name":"admin"
},...]
第五步,根据commits的id获取代码量
接口地址:
http://gitlab地址/api/v4/projects/项目id/repository/commits/commits的id?private_token=xxx
返回参数:
[{
"id":"d1b9747ba994f19fb6afb069b3751bd3cf21334d",
"short_id":"d1b9747b",
"title":"添加仓库",
"created_at":"2019-07-11T02:53:32.000+08:00",
"parent_ids":[
"25cf5c94b9ddc762bd2be73e1e542ebd26ad7sdf"
],
"message":"添加仓库 ",
"author_name":"admin",
"author_email":"admin@gmail.com",
"authored_date":"2019-07-11T02:53:32.000+08:00",
"committer_name":"admin",
"committer_email":"admin@gmail.com",
"committed_date":"2019-07-11T02:53:32.000+08:00",
"stats":{
"additions":21,
"deletions":8,
"total":29
},
"status":null,
"last_pipeline":null,
"project_id":219
},...]
stats里面就是我们想要的代码量了,additions为新增,deletions为删除,total为总量。修改操作实际上是删除之后再新增。
需要注意的是,这里统计出来的代码量是代码行数。
小结
拿到这些数据之后,不管你是存数据库,还是存excel都很方便,完全可以让系统每天定时去跑,不需要手动执行任何命令。
Gitlab文档:https://docs.gitlab.com/ee/api/README.html
原文链接:https://blog.csdn.net/wenwen513/article/details/95647364
(转)通过gitlab统计git提交的代码量的更多相关文章
- git统计项目中成员代码量
查看git上个人代码量 git log --author="username" --pretty=tformat: --numstat | awk '{ add += $1; su ...
- 查看Git提交的代码统计
1,提交Top5: git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5 2,某用户提交的代码统计 git log ...
- 【gitlab】首次提交本次代码到gitlab上,报错:Updates were rejected because the remote contains work that you do
首次提交本次代码到gitlab上,报错:Updates were rejected because the remote contains work that you do 报错情况如下: 错误原因: ...
- 统计git提交代码量
# a新增行数,d删除行数 git log --author="`git config --get user.name`" --pretty="%H" --a ...
- [代码质量] Git统计本次提交新增代码行数,建议每个评审commit新增行数小于400行
git log HEAD~1..HEAD --author="$(git config --get user.name)" --pretty=tformat: --numstat ...
- 使用git提交github代码
新的项目的提交 touch README.md git init git add README.md git commit -m "first commit" git remote ...
- 「git」mac下git提交github代码
1.打开终端,输入 cd -/.ssh 这个是检查你的ssh的是否存在的,如果存在,先将已有的ssh备份,或者将新建的ssh生成到另外的目录下(如果第一次配置一般都是不存在的),不存在,你将会看到如下 ...
- git 提交项目代码到码云步骤 以及出现错误解决办法
git initgit remote add origin 项目地址git add .git commit -m "注释"git push origin master 出现错误 $ ...
- 基于git命令的代码统计方法
基于git命令的代码统计方法 没什么好说的,基于git log命令,使用前提是安装了git ...... .统计所有人代码量 统计所有人代码增删量,拷贝如下命令,直接在git bash等终端,git项 ...
随机推荐
- 关于Handler同步屏障你可能不知道的问题
前言 很高兴遇见你 ~ 关于handler的内容,基本每个android开发者都掌握了,网络中的优秀博客也非常多,我之前也写过一篇文章,读者感兴趣可以去看看:传送门. 这篇文章主要讲Handler中的 ...
- python学习8 文件的操作
本文拷贝了on testing 的<python之文件操作:文件的读写>,只做学习之用 python的文件读写通过 一.用open函数 二.对文件读写操作 三.读取文件位置定位 1. op ...
- [LeetCode]1. 两数之和(难度:简单)
题目: 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标.你可以假设每种输入只会对应一个答案.但是,数组中同一个元素在答案里不能重复 ...
- PAT (Advanced Level) Practice 1023 Have Fun with Numbers (20 分) 凌宸1642
PAT (Advanced Level) Practice 1023 Have Fun with Numbers (20 分) 凌宸1642 题目描述: Notice that the number ...
- istio in kubernetes (二) -- 部署篇
在 Kubernetes 部署 Istio [demo演示] 可参考官方文档(https://istio.io/latest/zh/docs/setup/install/) ,以部署1.7.4版本作为 ...
- [^ ] 跟 [! ] 差在哪?-- Shell十三问<第十四问>
[^ ] 跟 [! ] 差在哪?-- Shell十三问<第十四问> 这道题目说穿了, 就是要探讨 Wildcard(通配符)与 Regular Expression(正则表达式)的差别的. ...
- Re:从零开始的Git保姆级使用教程
观前提示: 本文主要介绍了用命令的方式对Git进行操作(全程用的win10系统),而对于TortoiseGit和github desktop等图形化操作知识,只进行简单介绍或提及,详细使用会在提到的地 ...
- python中栈的实现
栈是一种线性数据结构,用先进后出或者是后进先出的方式存储数据,栈中数据的插入删除操作都是在栈顶端进行,常见栈的函数操作包括 empty() – 返回栈是否为空 – Time Complexity : ...
- Nginx/Apache + acme.sh 实现https访问
1 概述 acme.sh实现了acme协议,可以从Let's Encrypt生成免费的ssl证书用于实现https,本文介绍了常见的两种服务器Apache与Nginx上利用acme.sh配置https ...
- python进阶(17)偏函数partial
什么是偏函数partial python中提供一种对于函数固定属性的函数 偏函数的作用 把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数 偏函数的语法 使用偏函数必须先导入from ...