git查询当前目录下的文件列表_Gitqlite - 用SQL语法来查询Git仓库

当我们需要对一个本地的Git仓库进行查询和管理时,往往要使用 git 工具提供的接口,比较麻烦。能不能像查询数据库那样,把一个Git仓库看作一个数据库,使用方便又强大的SQL语法来进行查询呢?Gitqlite,这个使用 Go 语言编写的命令行工具,就能满足你的需求。

175cc70bb3497fc46f458c738621f786.png

Git

简介

Gitqlite,是 augmentable-dev 团队在 Github 上开源的使用SQL语法查询Git仓库的命令行工具,项目代码位于 https://github.com/augmentable-dev/gitqlite,目前版本为 0.0.1。Gitqlite 实现了使用 SQL 的 SELECT 语句,对本地 Git 仓库的 commit 和文件进行查询,可以方便实现对于 Git 仓库的数据统计,是个颇为有趣的命令行工具。

7ba6690050b5702e1e99853535951a45.png

GIT

安装

Gitqlite 使用 Go 语言编写,依赖于 Git 管理库 go-git,在有 Go 语言的环境下可以拉取安装:

gitqlite -h

安装会在把程序安装到 $GOBIN。也可以使用Docker进行安装:

gitqlite "SELECT * FROM commits"

示例

Gitqlite 是一个命令行工具,使用用法和帮助可以输入命令

gitqlite -h

Gitqlite 主要的输入参数就是进行查询的 SQL 语句,我们来看一个基本的例子:

gitqlite "SELECT * FROM commits"

该命令会从当前目录的 Git 仓库中,查询所有提交(commit)的所有字段并输出。我们可以使用 repo 参数来制定其他路径的 Git 仓库,甚至可以使用远程仓库的 HTTP 或 SSH 地址。

目前,gitqlite 主要定义了三个虚拟数据表:

  • commits,包含了仓库所有代码提交的信息。commits 的列包括消息、作者、提交者、增删行数等信息;
  • files,包含了仓库中所有文件的信息,包括名称、模式、类型等;
  • refs,commit的引用,包括类型、哈希等。

Gitqlite 的查询实现了SELECT语句的许多功能,我们来看一些使用例子:

  • 列出所有提交者的邮件列表
SELECT DISTINCT author_email FROM commits
  • 统计各作者(按邮件)的提交数并排序
SELECT author_email, count(*) FROM commits GROUP BY author_email ORDER BY count(*) DESC
  • 列出某次提交的所有文件
SELECT * FROM files WHERE commit_id='some_commit_id'
  • 列出作者邮件,以及各自的新增代码、删除代码和提交数,并排序
SELECT count(*) AS commits, SUM(additions) AS additions, SUM(deletions) AS  deletions, author_emailFROM commits GROUP BY author_email ORDER BY commits
  • 列出所有作者在一周中不同时间的提交数
SELECT    count(*) AS commits,    count(case when strftime('%w',author_when)='0' then 1 end) as sunday,    count(case when strftime('%w',author_when)='1' then 1 end) as monday,    count(case when strftime('%w',author_when)='2' then 1 end) as tuesday,    count(case when strftime('%w',author_when)='3' then 1 end) as wednesday,    count(case when strftime('%w',author_when)='4' then 1 end) as thursday,    count(case when strftime('%w',author_when)='5' then 1 end) as friday,    count(case when strftime('%w',author_when)='6' then 1 end) as saturday,    author_emailFROM commits GROUP BY author_email ORDER BY commits
355eb7635dee881aaad0250080710c47.png

SQL

总结

Gitqlite 创新地把 SQL 和 Git 结合在一起,以 SQL 查询语法对 Git 仓库进行查询,提供了对于 Git仓库方便而又强大的查询统计工具。

Gitqlite 利用了 go-sqlite3 进行 SQL 语句的处理,使用了 go-git 进行 Git 仓库的查询,并实现了两者之间的转换,和命令行工具,是一个值得阅读的 Go 语言命令行工具库。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值