Askgit
askgit是用于在git存储库上运行SQL查询的命令行工具。它旨在通过公共接口(SQL)临时查询磁盘上的git存储库,作为将各种shell命令拼凑在一起的替代方法。它可以执行如下查询:

-有多少提交已被[email protected]创作?
SELECT 计数( *) FROM提交WHERE AUTHOR_EMAIL = ' [email protected] '
您可以尝试在公共git存储库上查询,而无需在https://try.askgit.com/上安装任何内容

初步支持针对GitHub API执行查询。

可以在下面找到更深入的示例和文档。

安装
自制酒

使用Docker
运行命令
从STDIN运行命令
用法
桌子
本地Git存储库
commits
blame
stats
files
branches
tags
GitHub表格
github_org_repos 和 github_user_repos
github_pull_requests
github_issues
查询示例
互动模式
出口
安装
自制酒
brew tap augmentable-dev/askgit
brew install askgit

go get -v -tags=sqlite_vtable github.com/augmentable-dev/askgit
将使用go工具链将二进制文件安装到$GOBIN。

GOBIN=$(pwd) go get -v -tags=sqlite_vtable github.com/augmentable-dev/askgit
将在您当前的目录中生成一个二进制文件。

使用Docker
使用docker在本地构建映像

docker build -t askgit:latest .
或使用Docker Hub的官方图片

docker pull augmentable/askgit:latest
运行命令
askgit在git仓库上运行。该存储库需要作为卷附加。本示例pwd对当前工作目录使用(bash)内置命令

[ pwd ]打印当前工作目录的绝对路径名。

docker run --rm -v

pwd
:/repo:ro augmentable/askgit "SELECT * FROM commits"
从STDIN运行命令
对于通过STDIN进行管道传递的命令,需要告知docker命令非交互式运行,以及将存储库附加到/repo。

cat query.sql | docker run --rm -i -v

pwd
:/repo:ro augmentable/askgit
用法
askgit -h
将为您的CLI版本输出最新的使用说明。通常,第一个参数是SQL查询字符串:

askgit "SELECT * FROM commits"
默认情况下,您当前的工作目录将用作git存储库的路径以进行查询。使用该--repo标志可以指定备用路径,甚至可以指定远程存储库引用(http(s)或ssh)。 askgit将在执行查询之前将远程存储库克隆到一个临时目录。

您也可以通过传入查询stdin:

cat query.sql | askgit
默认情况下,输出将是ASCII表。使用--format json或--format csv替代。请参阅-h所有选项。

桌子
本地Git存储库
指定回购(通过--repo标志或从当前目录)后,可以查询以下表格。

commits
与相似git log,该commits表包括当前已检出提交历史记录中的所有提交。

柱子 类型
ID 文本
信息 文本
概括 文本
author_name 文本
author_email 文本
author_when 约会时间
committer_name 文本
committer_email 文本
committer_when 约会时间
parent_id 文本
parent_count INT
blame
与相似git blame,该blame表包括当前HEAD中所有文件的责任信息。

柱子 类型
line_no INT
文件路径 文本
commit_id 文本
line_content 文本
stats
柱子 类型
commit_id 文本
文件路径 文本
加法 INT
删除 INT
files
该files表会遍历提交历史记录中的所有文件,默认情况下是从存储库中检出的内容开始。完整表是提交历史记录的每棵树中的每个文件。使用该commit_id列可以过滤属于特定提交工作树的文件。

柱子 类型
commit_id 文本
小路 文本
内容 文本
可执行文件 布尔
branches
柱子 类型
姓名 文本
偏僻的 布尔
目标 文本
头 布尔
tags
柱子 类型
全名 文本
姓名 文本
轻的 布尔
目标 文本
tagger_name 文本
tagger_email 文本
信息 文本
target_type 文本
GitHub表格
此功能正在开发中,可能会更改

下表提出了GitHub API请求,以在查询执行期间检索数据。因此,您应确保GITHUB_TOKEN设置了环境变量,以便对API请求进行身份验证。未经身份验证的API请求(no GITHUB_TOKEN)受GitHub严格的速率限制,并且可能需要更长的时间执行(查询执行将尝试遵守适用的速率限制)。

github_org_repos 和 github_user_repos
可以将这些表查询为需要单个参数的表值函数,如下所示:

-从github * org *返回所有存储库
SELECT * 从github_org_repos( ' expandable -dev ')返回

-从github * user *
选择所有 从github_user_repos( ' expandable -dev ')返回