使用gitbase 分析git 仓库代码

gitbase 是一个基于golang 开发的开源git 仓库sql 接口查询引擎,基于此工具,我们可以方便的分析git 仓库代码的情况
而且可以基于源码的分析,还是很强大的

安装

直接使用编译的二进制文件即可 https://github.com/src-d/gitbase/releases

配置

我使用mac 系统,参考mac 系统的配置添加path 即可

准备git 代码

顺便创建几个,或者clone github 开源项目

使用

  • 启动gitbase
gitbase server -v -d /path/to/repositories

启动日志

DEBU[0000] repository added path=/Users/dalong/mylearning/git-demos/marketOperation-OperationPlatform
DEBU[0000] repository added path=/Users/dalong/mylearning/git-demos/webhook-gitstats
DEBU[0000] repository added path=/Users/dalong/mylearning/git-demos/yunpan-docs
DEBU[0000] repository added path=/Users/dalong/mylearning/git-demos/zeebe-project-es-no-auth
DEBU[0000] repository added path=/Users/dalong/mylearning/git-demos/zombodb-docker-images
DEBU[0000] registered database to catalog db=gitbase
DEBU[0000] registered all available functions in catalog 
DEBU[0000] created index storage                        
DEBU[0000] registered pilosa index driver               
INFO[0000] squash tables rule is enabled                
INFO[0000] server started and listening on localhost:3306 
  • 连接sql 查询引擎
mysql -h127.0.0.1 -uroot
  • 生成的数据表

    对于表的详细字段信息,可以参考官方文档

  • 一个简单查询

    统计代码数,以及文件个数,代码来自官方文档,注意官方的有问题,主要是大小写的问题

SELECT
    LANGUAGE(file_path, blob_content) as lang,
    SUM(JSON_EXTRACT(LOC(file_path, blob_content), '$.code')) as code,
    SUM(JSON_EXTRACT(LOC(file_path, blob_content), '$.comment')) as comments,
    SUM(JSON_EXTRACT(LOC(file_path, blob_content), '$.blank')) as blanks,
    COUNT(1) as files
FROM commit_files
NATURAL JOIN refs
NATURAL JOIN blobs
WHERE ref_name='HEAD'
GROUP BY lang;

结果

说明

以上只是简单使用,使用的是已经内置了处理函数,详细的可以参考官方文档,实际上,社区中有人集成了
graphql 还是很强大的,同时我们集成sqler 直接进行restapi 的生成也是很不错的,
我们可以直接使用cube.js 方便的生成查询统计表报,这样就很强大了,因为毕竟是需要处理git 查询的,所以
对于仓库数量比较多,代码行数也比较多的,肯定会有点慢,可以基于增量,或者webhook 按需处理,同时官方
也提供了一个创建索引,以及优化的方案,详细的可以参考官方文档

参考资料

https://github.com/src-d/gitbase
https://docs.sourced.tech/gitbase

posted on 2019-05-11 23:53  荣锋亮  阅读(492)  评论(0编辑  收藏  举报

导航