(转)通过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":"[email protected]: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":"[email protected]",
            "authored_date":"2019-07-11T02:53:32.000+08:00",
            "committer_name":"admin",
            "committer_email":"[email protected]",
            "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":"[email protected]",
        "committed_date":"2019-07-11T02:53:32.000+08:00",
        "created_at":"2019-07-11T02:53:32.000+08:00",
        "author_email":"[email protected]",
        "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":"[email protected]",
    "authored_date":"2019-07-11T02:53:32.000+08:00",
    "committer_name":"admin",
    "committer_email":"[email protected]",
    "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

原文地址:https://www.cnblogs.com/Hero-/p/11719002.html

时间: 2024-11-13 09:33:52

(转)通过gitlab统计git提交的代码量的相关文章

使用statsvn统计svn中的代码量

StatSVN介绍 StatSVN是一个Java写的开源代码统计程序,从statCVS移植而来,能够从Subversion版本库中取得信息,然后生成描述项目开发的各种表格和图表.比如:代码行数的时间线:针对每个开发者的代码行数:开发者的活跃程度:开发者最近所提交的:文件数量:平均文件大小:最大文件:哪个文件是修改最多次数的:目录大小:带有文件数量和代码行数的Repository tree.StatSVN当前版本能够生成一组包括表格与图表的静态HTML文档. StatSVN下载 StartSVN官

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

git log HEAD~1..HEAD --author="$(git config --get user.name)" --pretty=tformat: --numstat | awk '{ add += $1 ; subs += $2 ; loc += $1 + $2 } END { printf "(HEAD~1, HEAD] 新增行数: %s 删除行数 : %s 总行数: %s\n",add,subs,loc }' 参考:https://www.cnbl

统计git提交代码量

# a新增行数,d删除行数 git log  --author="`git config --get user.name`" --pretty="%H" --after="2019-01-01" --numstat | awk 'NF==3 {a+=$1; d+=$2} END {printf("+%d, -%d\n", a, d)}' 原文地址:https://www.cnblogs.com/276815076/p/1207

mac下git提交github代码

1.打开终端,输入 cd -/.ssh 这个是检查你的ssh的是否存在的,如果存在,先将已有的ssh备份,或者将新建的ssh生成到另外的目录下(如果第一次配置一般都是不存在的),不存在,你将会看到如下: 接下来你就需要用默认的参数生成ssh,终端输入 ssh-keygen -t rsa -C [email protected] 这里的[email protected] 就是你注册github时的邮箱地址,比如我的是[email protected],那么我的终端就应该输入 ssh-keygen 

「git」mac下git提交github代码

1.打开终端,输入 cd -/.ssh 这个是检查你的ssh的是否存在的,如果存在,先将已有的ssh备份,或者将新建的ssh生成到另外的目录下(如果第一次配置一般都是不存在的),不存在,你将会看到如下: 接下来你就需要用默认的参数生成ssh,终端输入 ssh-keygen -t rsa -C [email protected] 这里的[email protected] 就是你注册github时的邮箱地址,比如我的是[email protected],那么我的终端就应该输入 ssh-keygen 

git提交不必要的文件或文件夹的配置使用

  在使用git提交项目代码的时候,有些文件及文件夹不需要提交,这里我们可以通过配置来实现.  例如如下截图,实际开发中我们只需提交:src,.gitignore,pom.xml   而自己项目文件一般都保留,但是有些则不必要提交,如maven项目的target文件夹等等. git忽略不必要文件有2种方法,一种是命令方法,一种是eclipse安装git插件设置 方法一:命令方法 1.首先在仓库中创建隐藏文件".gitignore",选中本地仓库,右击"Git Bash Her

svn代码量统计工具

StatSVN介绍 StatSVN是一个Java写的开源代码统计程序,从statCVS移植而来,能够从Subversion版本库中取得信息,然后生成描述项目开发的各种表格和图表.比如:代码行数的时间线:针对每个开发者的代码行数:开发者的活跃程度:开发者最近所提交的:文件数量:平均文件大小:最大文件:哪个文件是修改最多次数的:目录大小:带有文件数量和代码行数的Repository tree.StatSVN当前版本能够生成一组包括表格与图表的静态HTML文档. StatSVN下载 StartSVN官

如何查看整个项目工程代码量

对于申请双软认证,iso质量管理认证等,需要统计项目工程的代码量. 估计的话,也能大概估个数,但是不是很准,如何才能比较准确的评估出整个项目工程的代码量呢? 下面推荐一个爆款,可以根据自己设定要统计的项,来统计代码. SourceCounter 废话不多说,直接上图 结果出炉了 爽不爽!

你见过最大的Python项目是多大?十万行的你见过?还说代码量少?

上表已经按代码行数排了序.有意思的一点是, 代码规模最大的前4名中除了 CPython 之外其他三个全部是运维性质的项目,本来我猜测代码应该比较多的项目比如 Odoo 排名反而很靠后.我对运维项目了解有限,不太清楚为什么这些项目的代码规模会名列前茅,或许是因为要支持的内容比较多而杂? 本次统计中纯 Python 代码量最大的 Sentry 几乎达到了 70W 行,这是相当有规模的项目了.30W~50W 行代码的项目有三个,包括基础项目 CPython 在内.20W 和 10W 行代码规模的分别有