使用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