(转)通过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项 ...
随机推荐
- Jmeter(四十) - 从入门到精通进阶篇 - Jmeter配置文件的刨根问底 - 中篇(详解教程)
1.简介 为什么宏哥要对Jmeter的配置文件进行一下讲解了,因为有的童鞋或者小伙伴在测试中遇到一些需要修改配置文件的问题不是很清楚也不是很懂,就算修改了也是模模糊糊的.更有甚者觉得那是禁地神圣不可轻 ...
- go中控制goroutine数量
控制goroutine数量 前言 控制goroutine的数量 通过channel+sync 使用semaphore 线程池 几个开源的线程池的设计 fasthttp中的协程池实现 Start Sto ...
- Spring Security OAuth 格式化 token 输出
个性化token 背景 上一篇文章<Spring Security OAuth 个性化token(一)>有提到,oauth2.0 接口默认返回的报文格式如下: { "ac ...
- redhat7.6 安装 Python 3
redhat7.6 默认安装了python2.7. 查看已安装python情况 cd / # 定位到根目录 whereis python # 查看python所在目录 /usr/bin cd /usr ...
- 持续集成 简介&环境搭建
1. 持续集成简介 2. 持续集成环境搭建(Jenkins) 2.1 Git 安装 2.2 JDK 1.8 安装 2.3 Tomcat 安装 2.4 Maven 简介和安装 2.5 Jenkins 安 ...
- 程序员的开源月刊《HelloGitHub》第61期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 内容包括:有趣.入门级的开源项目.开源书籍.实战项目.企业级项目等,让你在短时间内感 ...
- OO第一单元作业总结——表达式求导
OO第一单元作业总结 第一次作业 基于度量分析代码结构 基本算法 第一次作业是简单多项式导函数求解,不需要对输入数据的合法性进行判定, 基本思想是用 (coeff, expo)表示二元组 coeff* ...
- 各种平衡树收集(收集控(‐^▽^‐))\平衡树模板题的各种花式做法QAQ
非旋转treap!!!(FHQ Treap) 递归版Splay(无需维护父指针) Scapegoat _ Tree--替罪羊树(一只(棵)特立独行的猪(树)) 宗法树(平衡线段树\finger_tre ...
- BPM系统,工作流引擎,表单引擎常用30个功能与常见问题
1.1:支持国际化 如果使用工具包的模式开发,支持国际化的工作由自己完成的. 如果使用Ccbpm 的前端,主要的功能页面已经支持, 后台的设置的页面全部中文,没有做支持国际化. 1.2:能单独部署,微 ...
- jmeter响应时间与postman响应时间为什么不一样?
postman响应时间 是一个线程或者一个用户再者说是发送一次请求的响应时间,一般都是200ms一下: 而jmeter属于并行,就是多个用户去访问这个功能点或者接口,多个用户同时访问,就会造成压力,自 ...