通过gitlab远程统计git代码量

2023-05-16

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首单词为Merge,表示合并操作,剔除此代码量
接口地址:
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
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过gitlab远程统计git代码量 的相关文章

  • 如何使用它们的更改来解决选择冲突?

    My git cherry pick FOO产生了冲突 我可以检查冲突的文件并删除之间的行 lt lt lt lt lt lt lt and 以及冲突标记本身 但我希望有一种更简单的方法 我觉得svn等同于选择theirs conflict
  • 如何列出 Git 1.7+ 中的所有远程分支?

    我试过了git branch r 但这仅列出我在本地跟踪的远程分支 如何找到我没有的列表 命令是否列出对我来说并不重要all远程分支或仅那些未跟踪的分支 For the vast majority 1 of visitors here th
  • 有没有办法列出Git中未修改的文件?

    我从另一个来源以 tarball 的形式获取了一些更改 我想知道哪些文件没有更改 目标是 Git 克隆 因此可以轻松查看新增内容和更改内容 有人知道如何获取未更改内容的列表 不包括未跟踪的内容 吗 编辑 换句话说 我希望利用 Git 来查找
  • 判断 Git 提交是否是合并/恢复提交

    我正在编写一个脚本 需要检查特定提交是否是合并 恢复提交 我想知道是否有 git 技巧 到目前为止我想到的 我绝对不想依赖这里的提交消息 是检查HASH 2看看我是否没有收到错误 是否有更好的方法 判断某个东西是否是合并很容易 这是不止一位
  • 如何预览 Git 中的隐藏内容?

    我想检查一个存储 并找出如果我将其应用于当前状态的工作树 它会发生什么变化 我知道我可以对存储进行 git diff 但这向我展示了工作树和存储之间的所有差异 而我只是想知道存储应用将改变什么 git stash show将向您显示最近存储
  • 在两个单独的分支或存储库中管理项目后端和前端?

    我启动了一个移动应用程序项目 该项目将具有服务器端和应用程序本身 所以 在master分支我创建了2个项目myapp server and myapp然后我创建了另外 2 个分支backend and frontend我只想将与它们相对应的
  • 克隆存储库而不将其设为原始远程存储库

    我正在从一台将被擦除的计算机上克隆一个 git 存储库 是否可以在不创建原始存储库的情况下克隆存储库origin master 或者我是否需要克隆它 然后删除远程分支 这是通过git remote rm origin Edit 存储库只有一
  • 在 git 子模块中签出分支

    如何从子模块内更改分支 当我跑步时git branch从子模块内 我看到以下输出 gt git branch HEAD detached from 229a7b2 master 我如何将自己置于一个新的分支上 喜欢development 只
  • 在 git repo 中查找超过 x MB 且 HEAD 中不存在的文件

    我有一个 Git 存储库 用于存储随机的内容 主要是随机脚本 文本文件 我设计的网站等 随着时间的推移 我删除了一些大型二进制文件 通常为 1 5MB 这些文件会增加存储库的大小 而我在修订历史记录中不需要这些文件 基本上我希望能够做到 m
  • git subtree pull -P 不管 总是合并冲突

    问题 即使我没有进行任何更改 每次尝试拉入子树时 我都会遇到合并冲突 我在做什么 In 子树仓库 Make some changes git commit am Changes made git push origin master In
  • 使用 TFS 个人访问令牌克隆 Git 存储库

    我正在尝试以编程方式克隆 git 存储库 我的 ASP NET MVC 应用程序正在创建并启动一个进程 处理进程的代码工作正常 但是当尝试使用本地 TFS PAT 克隆 git 存储库时 身份验证失败 我无法使用 NTLM 或要求用户输入凭
  • git 预提交钩子格式代码 - Intellij/Android Studio

    本要点展示了如何在预提交时使用 Eclipse 格式化程序自动格式化 Java 代码 Source https gist github com ktoso 708972 https gist github com ktoso 708972
  • 无法使用 git 配置文件进行 ssh

    我知道它被问了很多次 但我无法得到我的问题的答案 我正在尝试使用配置文件 ssh 到系统 配置文件是 Host qa HostName 10 218 70 345 User user IdentityFile C Users bean ss
  • gitlab 中的自动发行说明[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 任何人都可以帮助我在 git lab 中自动生成发行说明 有什么方法可以执行此操作 请告诉我 谢谢 您可以使用 API 列出里程碑中的
  • SSH 到 Openshift 服务器失败

    我正在 openshift 服务器上使用 jboss catridge 我希望与其他人共享此实例并添加其他用户的公钥 id rsa pub 当其他人尝试访问该实例时 他会收到以下错误 我在他的实例中尝试了同样的方法 但看到了同样的错误 与
  • 推送时发生 Git 错误 - update_ref 失败

    当我尝试推送本地提交时遇到问题 这可能是在 Android Studio 崩溃时发生的 这是错误 update ref 引用 refs remotes origin master 失败 无法锁定 ref refs remotes origi
  • 使用 Yarn 从 Gitlab 安装私有包

    我有一个私有 npm 包 它使用 Gitlab CI 管道发布到 Gitlab 包注册表 我想在项目中使用安装这个包yarn 遵循文档帮助我想出了以下内容 npmrc file gitlab com api v4 packages npm
  • git diff - 只显示哪些目录发生了变化

    有没有办法只列出已更改的目录 如果我在 git root 的话 project 我更改的文件是 project subtool file1 project subtool file2 project subtool3 file1 我只是想
  • git push heroku master 权限被拒绝

    我正在关注 ruby railstutorial 我运行命令 git push heroku master 它吐出了这个错误 Permission denied publickey fatal Could not read from rem
  • bash:gitolite:找不到命令

    我正在尝试使用 Gitolite 在 Gitlab 中创建一个新分支 我完成安装步骤 当我遇到 设置 gitolite 部分时 我遇到了麻烦 我跟着这个link http sitaramc github com gitolite setup

随机推荐

  • GDB 知识点——基础操作

    Linux C 中的 GDB 调试使用 xff1a 1 GDB 的主要功能 xff1a 1 启动被调试程序 2 让被调试的程序在指定的位置停住 3 当程序被停住时 xff0c 可以检查程序状态 xff08 如变量的值 xff09 2 检查
  • 员工管理系统(C 语言)——项目说明

    项目名称 xff1a 员工管理系统 项目目的 xff1a 1 实现简单的公司对员工信息的管理 2 通过项目锻炼实现逻辑转换为代码的能力 3 利用函数封装实现项目过程中的逻辑过程以及需求功能的实现 4 学会数据库的操作以及网络通信 5 强化代
  • 员工管理系统(C 语言)——客户端解析

    源码下载地址 xff1a https download csdn net download wenfei11471 10477504 客户端功能 xff1a 1 运行时先测试是否能连通服务器 xff08 不畅通如下图所示 xff09 xff
  • 员工管理系统(C 语言)——服务器解析

    源码下载地址 xff1a https download csdn net download wenfei11471 10477504 服务器功能 xff1a 1 运行时主界面 xff08 服务器启动后 xff0c 只有管理员下线 xff0c
  • 排序——选择排序、冒泡排序和快速排序比较

    一 选择排序思路 xff1a 1 以 int 类型为例 2 拿第一个数与后面数相比较 xff0c 如果比后面的数大则交换 3 拿第二个数与后面的数比较 xff0c 如果比后面的数大则交换 4 直到比较到倒数第二个数 xff0c 最后一个数不
  • C 语言中 const 与指针的结合使用

    请区分一下几种指针的区别 1 const int p 2 int const p 3 int const p 4 const int const p 5 const int const p 解析 xff1a 1 const int p 中
  • Ubuntu16.04上安装百度网盘后打不开

    现在百度网盘推出了Linux版本 xff0c 也有Ubuntu下安装的deb文件 xff0c 但是我在Ubuntu上安装后却打不开 xff0c 报错 baidunetdisk crashed with SIGABRT in gnu cxx
  • C/C++的“文件包含”处理时头文件被重复包含的问题探究及解决方法(用最简单的例子进行说明)

    这篇博文是博文https blog csdn net wenhao ir article details 125668051的配套博文 头文件被重复包含是下面这样的现象 xff1a A文件里包含了C文件 xff0c B文件里也包含了C文件
  • BIN,BCD,ASCII码分别对应的Hex(16进制)数

    BIN BCD ASCII码分别对应的Hex xff08 16进制 xff09 数 以十进制的 56 为例 BIN 码 对应二进制数为 0011 1000对应Hex数据为 0x38BIN码就是二进制数 xff1b 压缩BCD 码 对应二进制
  • .LDS 文件详解

    最近在研究uboot xff0c 红色部分为我加上的注解 转载地址 xff1a http blog chinaunix net space php uid 61 23373524 amp do 61 blog amp cuid 61 232
  • 13 select的优化一

    1 上个例子中 xff0c select通过for循环轮询client套接字 xff0c 轮询的范围比较大 xff0c 有优化的地方 2 优化代码 xff1a 通过数组存储client的套接字 xff0c 达到少轮询的效果 xff0c 可以
  • 二.手写迷你版Tomcat-minicat2.0

    minicat 1 0我们实现了返回固定的字符串 34 Hello minicat 34 minicat 2 0需求 xff1a 封装Request和Response对象 xff0c 返回html静态资源文件 封装Request对象 想要封
  • 三.手写迷你版Tomcat-minicat3.0

    minicat 1 0我们实现了返回固定的字符串 34 Hello minicat 34 minicat 2 0封装Request和Response对象 xff0c 返回html静态资源文件 minicat 3 0需求 xff1a 请求se
  • python爬取全国五级行政区

    以前爬过国家统计局的四级行政区 xff08 http www stats gov cn tjsj tjbz tjyqhdmhcxhfdm 2017 xff09 xff0c 但是对于五级数据效果不是很好 偶然间发现这个网站 xff1a htt
  • ElasticSearch使用elasticsearchTemplate聚合查询

    这两天正好做个需求 xff0c 需要用到聚合查询 前几篇文章只是简单的提到过 xff0c 并没有真正的运用到实际产出中 xff0c 本篇结合实际代码 xff0c 专项学习ES的聚合查询 1 业务背景 有一张地址索引表 xff1a hisAd
  • Java字节码

    Java最黑科技的玩法就是字节码编程 xff0c 也就是动态修改或是动态生成 Java 字节码 使用字节码可以玩出很多高级的玩法 xff0c 最高级的还是在 Java 程序运行时进行字节码修改和代码注入 听起来是不是一些很黑客 xff0c
  • TCP/IP (一) accept建立连接

    七层网络协议 三次握手 四次分手 xff0c 这些大家都比较熟知 xff0c 这里主要是带着一些问题来思考整个TCP IP流程 1 三次握手的具体流程是怎么样的 xff1f 2 socket编程中int listen int fd int
  • http 的认证模式

    周海汉 2006 7 11 ablozhou 64 gmail com SIP类似Http协议 其认证模式也一样 Http协议 xff08 RFC 2616 xff09 规定可以采用Base模式和摘要模式 xff08 Digest sche
  • Java Agent

    在 Java 字节码 一文中有提到 xff0c 使用 Java Agent 操控字节码 xff0c 本文将讨论 Java Agent xff0c 这是普通 Java 开发人员的真正的黑魔法 Java Agent 能够通过执行字节码的直接修改
  • 通过gitlab远程统计git代码量

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