SQL|Askgit:利用熟悉的SQL语句挖掘git仓库的信息
git提供了强大的功能,可以对仓库信息和历史一览无余,但是git命令的使用相对比较繁琐,而且很多时候需要借助其他shell工具组成栈来联合一起完成信息查询,这对不是很熟悉shell命令行的人是一项比较艰难的任务。那么有什么简单的方法可以完成这个任务呢?
相对比很多IT小伙伴可能都比较熟悉SQL语言,一种比较通用便捷的数据库查询和操作语言。本文虫虫就给大家介绍一个开源工具Askgit,用来在git存储库执行SQL查询的命令行工具。在通过公共接口(SQL)临时查询磁盘上的git存储库,来代替各种繁琐git命令行。
文章图片
安装
Askgit可以可以使用以下方法构建go 命令直接安装二进制文件:
go get -v -tags=sqlite_vtable github.com/augmentable-dev/askgit
个命令将会下载软件包,相关性类库,并将所有内容编译为可执行文件。如果无法确定它的安装位置,请检查是否已GOPATH正确设置,然后它将以结尾$GOPATH/bin。
另外我们可以通过指定$GOPATH方式将其安装到特定的目录(比如当前目录):
GOBIN=$(pwd) go get -v -tags=sqlite_vtable github.com/augmentable-dev/askgit
Askgit也支持通过docker方式安装:
docker pull augmentable/askgit:latest
docker方式安装的使用方法如下:
docker run -v `pwd`:/repo:ro askgit ''SELECT * FROM commits''
基本使用
获取测试库
本文以Askgit的github仓库为例进行,先clone一个源码。注意对于一些比较大的git仓库,Askgit操作比较慢慢,这可能是目前发现一个问题。
commit信息
Git的基本单位是commit,commit表示对仓库文件的变更历史。通过对commit的信息可以追溯参考每一个文件延续历史信息。
commit表中各个字段信息如:
字段 类型 说明
id TEXT commitID
message TEXT 提交注释
summary TEXT
author_name TEXT 作者
author_email TEXT作者邮箱
author_when DATETIME作者时间
committer_name TEXT 提交者
committer_email TEXT提交者邮箱
committer_when DATETIME提交时间
parent_id TEXT 父commitID
parent_count INT 父commit计数
tree_id TEXT 数对象ID
additions INT 增加
deletions INT 删除
repo仓库的历史时间
首先我们来仓库的最早提交信息时间。对于大多数仓库,日期将是相似的,使用author_when则代码是编写时(根据作者)。对于一些历史项目,可能他们是通过电子邮件发布补丁(例如linux或postgres),是通过committer_when是添加代码时的时间。
文章图片
第一次提交信息
我们可以搜索第一次提交时候的相关信息,包括提交人,commit信息,邮箱地址,提交时间等:
askgit ''select message, author_name, author_email, author_when from commits order by committer_when asc limit 1''
文章图片
显示askgit仓库第一次提交到时候是2020年7月3日,由Patrick DeVivo提交的,项目实际一个非常新的项目。
Top 10提交者
提交添加的代码最多的10个作者是:
askgit ''select summary, author_name, author_when, additions from commits order by additions desc limit 10''
文章图片
可以看到,项目主要开发者有Patrick DeVivo和vialenon 两个都是由他们两个提交的。
贡献率图
askgit ''WITH total_commits(total) AS (
SELECT count(*) AS total FROM commits
)
SELECT
author_name,
round(count(*)*100.0 / (SELECT total FROM total_commits), 2) AS percentage,
printf('%.' || (CAST (round(count(*)*100.0 / (SELECT total FROM total_commits)) AS INT) + 1) || 'c', '█') AS commits
FROM commits GROUP BY author_name
ORDER BY percentage DESC''
文章图片
Top 10代码清理者
删除代码最多的10个人:
askgit ''select summary, author_name, author_when, deletions from commits order by deletions desc limit 10''
文章图片
同样,项目代码清理也有Patrick DeVivo和vialenon 两个。
总提交次数
askgit ''select count(*) from commits''
+----------+
| COUNT(*) |
+----------+
| 79 |
+----------+
推荐阅读
- 时间表|2021考研:怎么严格利用自己的考研时间表?
- 法制|利用虚假微信支付骗钱?警方将这一诈骗团伙打掉
- 悉知|悉知科技深化制造企业线上引流,利用数字化驱动业绩增长
- 乌兹别克斯坦|乌兹别克斯坦将利用外资推进电影行业市场化
- Lightning接口|苹果不愿屈服于Type-C,利用磁吸or无线充电正面反击?
- 许佳琪|利用戴燕妮,打压许佳琪《青春有你2》请对漂亮姐姐好一点
- 利用小孩子做掩护!这对姐妹花竟在杭州一超市里做出这种事...
- 自卖自买利用“快递保价”诈骗 还“收徒”传授“致富经”
- 钟某某|福建一学校校长被指利用职权猥亵女教师,教育局:停职调查
- 国家文物局印发大遗址利用导则|国家文物局印发大遗址利用导则 提升文物保护管理水平