赞
踩
当我们需要对一个本地的Git仓库进行查询和管理时,往往要使用 git 工具提供的接口,比较麻烦。能不能像查询数据库那样,把一个Git仓库看作一个数据库,使用方便又强大的SQL语法来进行查询呢?Gitqlite,这个使用 Go 语言编写的命令行工具,就能满足你的需求。
Gitqlite,是 augmentable-dev 团队在 Github 上开源的使用SQL语法查询Git仓库的命令行工具,项目代码位于 https://github.com/augmentable-dev/gitqlite,目前版本为 0.0.1。Gitqlite 实现了使用 SQL 的 SELECT 语句,对本地 Git 仓库的 commit 和文件进行查询,可以方便实现对于 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 主要定义了三个虚拟数据表:
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
Gitqlite 创新地把 SQL 和 Git 结合在一起,以 SQL 查询语法对 Git 仓库进行查询,提供了对于 Git仓库方便而又强大的查询统计工具。
Gitqlite 利用了 go-sqlite3 进行 SQL 语句的处理,使用了 go-git 进行 Git 仓库的查询,并实现了两者之间的转换,和命令行工具,是一个值得阅读的 Go 语言命令行工具库。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。