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提交的代码量的更多相关文章

  1. git统计项目中成员代码量

    查看git上个人代码量 git log --author="username" --pretty=tformat: --numstat | awk '{ add += $1; su ...

  2. 查看Git提交的代码统计

    1,提交Top5: git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5 2,某用户提交的代码统计 git log ...

  3. 【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 报错情况如下: 错误原因: ...

  4. 统计git提交代码量

    # a新增行数,d删除行数 git log  --author="`git config --get user.name`" --pretty="%H" --a ...

  5. [代码质量] Git统计本次提交新增代码行数,建议每个评审commit新增行数小于400行

    git log HEAD~1..HEAD --author="$(git config --get user.name)" --pretty=tformat: --numstat ...

  6. 使用git提交github代码

    新的项目的提交 touch README.md git init git add README.md git commit -m "first commit" git remote ...

  7. 「git」mac下git提交github代码

    1.打开终端,输入 cd -/.ssh 这个是检查你的ssh的是否存在的,如果存在,先将已有的ssh备份,或者将新建的ssh生成到另外的目录下(如果第一次配置一般都是不存在的),不存在,你将会看到如下 ...

  8. git 提交项目代码到码云步骤 以及出现错误解决办法

    git initgit remote add origin 项目地址git add .git commit -m "注释"git push origin master 出现错误 $ ...

  9. 基于git命令的代码统计方法

    基于git命令的代码统计方法 没什么好说的,基于git log命令,使用前提是安装了git ...... .统计所有人代码量 统计所有人代码增删量,拷贝如下命令,直接在git bash等终端,git项 ...

随机推荐

  1. 【ZeyFraのJavaEE开发小知识05】Mybatis-Plus & Axios

    关于如何在Mybatis-Plus中添加SQL拦截器 之前ZeyFra在MyBatis-Plus[踩坑记录01]一文中提到过,使用Mybatis-Plus时最好使用MybatisSqlSessionF ...

  2. 【wp】2021V&NCTF

    前几天打完的V&NCTF公开赛,做题的时候没记过程,这是复现wp. 最后排名Top 18,三道RE+两道杂项(wp没啥可放的hhh)+一道web,感觉re题目还是挺好的,难度适中点赞,尤其pc ...

  3. P1308_统计单词数(JAVA语言)

    题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给 ...

  4. JavaSE(一)

    1.标识符 标识符是由数字,字母,下划线,$ 等进行命名的符号,但是不可以以数字开头: 标识符包含了关键字,变量名,他人定义,自己定义的. 2.关键字 关键字是指有特殊用途的符号.由以下50种构成 3 ...

  5. 如何在O(1)时间复杂度获取栈中最大值和最小值

    问题描述: 如何在O(1)时间复杂度获取栈中的最大值和最小值? 问题分析: 普通栈规定的push(入栈).pop(出栈).peek(查看栈顶)等操作都只能在栈顶上操作,如果栈中元素是有序的,那么我们就 ...

  6. C# .NET Socket 简单实用框架,socket组件封装

    参考资料 https://www.cnblogs.com/coldairarrow/p/7501645.html 根据.NET Socket 简单实用框架进行了改造,这个代码对socket通信封装还是 ...

  7. CrashLoopBackOff的解决办法之一

    问题来源 # kubectl get pods -n assembly NAME READY STATUS RESTARTS AGE alertmanager-858b7749c5-6jsfh 0/1 ...

  8. KMP字符串匹配学习笔记

    部分内容引自皎月半洒花的博客 模式串匹配问题模型给定一个需要处理的文本串和一个需要在文本串中搜索的模式串,查询在该文本串中,给出的模式串的出现有无.次数.位置等.算法思想每次失配之后不会从头开始枚举, ...

  9. Win10环境下YOLO5 快速配置与测试

    目录 一.更换官方源 二.安装Pytorch+CUDA(python版本) 三.YOLO V5 配置与验证 四.数据集测试 五.小结 不想看前面,可以直接跳到标题: 一.更换官方源 在 YOLO V5 ...

  10. js--原型和原型链相关问题

    前言 阅读本文前先来思考一个问题,我们在 js 中创建一个变量,我们并没有给这个变量添加一些方法,比如 toString() 方法,为什么我们可以直接使用这个方法呢?如以下代码,带着这样的问题,我们来 ...