3个版本 (破坏性)
0.3.0 | 2024年2月24日 |
---|---|
0.2.0 | 2024年2月20日 |
0.1.0 | 2024年2月15日 |
#1552 in 开发工具
29KB
295 行
git-query
git-query
是一款强大的命令行工具,用于使用SQL查询和分析Git仓库的提交历史。
安装
确保您系统上已安装 Rust。然后,使用以下命令安装 git-query
:
cargo install git-query
用法
- 打开终端并导航到您要查询的Git仓库。
- 运行git-query命令
这将启动程序并执行初始SQL查询,显示仓库的最新提交。git-query
- 然后您可以针对提交表运行SQL查询。例如,要检索特定时间范围内的提交
SELECT * FROM commits WHERE date BETWEEN '2022-01-01 00:00:00 UTC' AND '2022-12-31 23:59:59 UTC';
- 要退出程序,只需输入以下命令
exit
要加载来自不存在的提交(例如另一个分支中的提交)的附加提交历史,可以使用 traverse
命令: traverse <提交ID>
。
如果您只想检索特定分支的提交历史,请在运行 git-query
之前导航到该分支(使用 git checkout
)。
表
以下提供可以查询的SQL表的信息和数据。
提交
id
:提交IDauthor
:提交作者date
:提交日期时间message
:提交信息
分支
name
:分支名称type
:分支类型(远程或本地)head_commit_id
:HEAD提交IDhead_commit_date
:HEAD提交的日期时间
标签
id
:标签IDname
:标签名称target_id
:标签目标ID(例如,提交ID)target_type
:目标类型(例如,提交)tagger
:创建标签的人date
:标签的日期时间message
:标签信息。任何PGP签名都将被移除
示例查询
这些查询使用serde仓库。
获取最新提交
>> SELECT * FROM commits ORDER BY date DESC LIMIT 1;
┌─────────┬──────────────┬─────────────────────────┬───────────────────────────┐
│ id ┆ author ┆ date ┆ message │
╞═════════╪══════════════╪═════════════════════════╪═══════════════════════════╡
│ 1d54973 ┆ David Tolnay ┆ 2024-02-13 03:49:34 UTC ┆ Merge pull request #2697 │
│ ┆ ┆ ┆ from nyurik/format-str │
│ ┆ ┆ ┆ │
│ ┆ ┆ ┆ A few minor `write_str` │
│ ┆ ┆ ┆ optimizations │
└─────────┴──────────────┴─────────────────────────┴───────────────────────────┘
Rows returned: 1
获取贡献者列表
>> SELECT DISTINCT(author) FROM commits ORDER BY author LIMIT 5;
┌───────────────────┐
│ author │
╞═══════════════════╡
│ Adam Crume │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ Adam H. Leventhal │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ Alex │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ Alex Crichton │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ Alex Shapiro │
└───────────────────┘
Rows returned: 5
获取作者的最后一个提交
>> SELECT * FROM commits WHERE author = 'Adam Crume' ORDER BY date DESC LIMIT 1;
┌─────────┬────────────┬─────────────────────────┬─────────────────────────────┐
│ id ┆ author ┆ date ┆ message │
╞═════════╪════════════╪═════════════════════════╪═════════════════════════════╡
│ 05e931b ┆ Adam Crume ┆ 2018-06-03 04:11:42 UTC ┆ Update tests and use quote! │
│ ┆ ┆ ┆ macro │
│ ┆ ┆ ┆ │
└─────────┴────────────┴─────────────────────────┴─────────────────────────────┘
Rows returned: 1
获取提交数量
>> SELECT COUNT(*) FROM commits;
┌──────────┐
│ COUNT(*) │
╞══════════╡
│ 3908 │
└──────────┘
Rows returned: 1
获取包含特定模式的提交信息
>> SELECT * FROM commits WHERE message LIKE '%quote! macro%'
┌─────────┬────────────┬─────────────────────────┬─────────────────────────────┐
│ id ┆ author ┆ date ┆ message │
╞═════════╪════════════╪═════════════════════════╪═════════════════════════════╡
│ 05e931b ┆ Adam Crume ┆ 2018-06-03 04:11:42 UTC ┆ Update tests and use quote! │
│ ┆ ┆ ┆ macro │
│ ┆ ┆ ┆ │
└─────────┴────────────┴─────────────────────────┴─────────────────────────────┘
Rows returned: 1
获取特定时间范围内的提交
>> SELECT * FROM commits WHERE date BETWEEN '2021-01-20 00:00:00 UTC' AND '2021-01-21 00:00:00 UTC';
┌─────────┬───────────────┬─────────────────────────┬──────────────────────────┐
│ id ┆ author ┆ date ┆ message │
╞═════════╪═══════════════╪═════════════════════════╪══════════════════════════╡
│ b276849 ┆ Jonas Bushart ┆ 2021-01-20 19:41:45 UTC ┆ Prevent panic when │
│ ┆ ┆ ┆ deserializing malformed │
│ ┆ ┆ ┆ Duration │
│ ┆ ┆ ┆ │
│ ┆ ┆ ┆ std::time::Duration::new │
│ ┆ ┆ ┆ can panic. There is no │
│ ┆ ┆ ┆ alternative non-panicing │
│ ┆ ┆ ┆ constructor. │
│ ┆ ┆ ┆ Check the panic │
│ ┆ ┆ ┆ condition beforehand and │
│ ┆ ┆ ┆ return an error instead │
│ ┆ ┆ ┆ of panicing. │
│ ┆ ┆ ┆ │
│ ┆ ┆ ┆ Fixes #1933 │
│ ┆ ┆ ┆ │
└─────────┴───────────────┴─────────────────────────┴──────────────────────────┘
Rows returned: 1
按最新提交日期排序分支
>> SELECT * FROM branches ORDER BY head_commit_date DESC;
┌───────────────┬────────┬────────────────┬─────────────────────────┐
│ name ┆ type ┆ head_commit_id ┆ head_commit_date │
╞═══════════════╪════════╪════════════════╪═════════════════════════╡
│ master ┆ local ┆ 1d54973 ┆ 2024-02-13 03:49:34 UTC │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ origin/HEAD ┆ remote ┆ 1d54973 ┆ 2024-02-13 03:49:34 UTC │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ origin/master ┆ remote ┆ 1d54973 ┆ 2024-02-13 03:49:34 UTC │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ origin/watt ┆ remote ┆ af31449 ┆ 2022-07-02 00:56:18 UTC │
└───────────────┴────────┴────────────────┴─────────────────────────┘
Rows returned: 4
获取最新标签
>> SELECT * FROM tags ORDER BY DATE DESC LIMIT 1;
┌─────────┬──────────┬───────────┬───────────┬───────────┬──────────┬──────────┐
│ id ┆ name ┆ target_id ┆ target_ty ┆ tagger ┆ date ┆ message │
│ ┆ ┆ ┆ pe ┆ ┆ ┆ │
╞═════════╪══════════╪═══════════╪═══════════╪═══════════╪══════════╪══════════╡
│ 9ed62c3 ┆ v1.0.196 ┆ ede9762 ┆ commit ┆ David ┆ 2024-01- ┆ Release │
│ ┆ ┆ ┆ ┆ Tolnay ┆ 26 ┆ 1.0.196 │
│ ┆ ┆ ┆ ┆ ┆ 22:00:35 ┆ │
│ ┆ ┆ ┆ ┆ ┆ UTC ┆ │
└─────────┴──────────┴───────────┴───────────┴───────────┴──────────┴──────────┘
Rows returned: 1
获取带有提交信息的最新标签
>> SELECT commits.*, tags.id AS tag_id, tags.date AS tag_date, tags.message AS tag_message FROM commits INNER JOIN tags ON commits.id = tags.target_id ORDER BY tags.date DESC LIMIT 1;
┌─────────┬───────────┬───────────┬───────────┬─────────┬───────────┬──────────┐
│ id ┆ author ┆ date ┆ message ┆ tag_id ┆ tag_date ┆ tag_mess │
│ ┆ ┆ ┆ ┆ ┆ ┆ age │
╞═════════╪═══════════╪═══════════╪═══════════╪═════════╪═══════════╪══════════╡
│ ede9762 ┆ David ┆ 2024-01-2 ┆ Release ┆ 9ed62c3 ┆ 2024-01-2 ┆ Release │
│ ┆ Tolnay ┆ 6 ┆ 1.0.196 ┆ ┆ 6 ┆ 1.0.196 │
│ ┆ ┆ 22:00:35 ┆ ┆ ┆ 22:00:35 ┆ │
│ ┆ ┆ UTC ┆ ┆ ┆ UTC ┆ │
└─────────┴───────────┴───────────┴───────────┴─────────┴───────────┴──────────┘
Rows returned: 1
提示
- 利用标准SQL查询从Git提交历史中提取有价值的见解。
- 尝试不同的查询以根据您的特定需求定制结果。
- 有关高级SQL语法,请参阅SQLite文档。
许可证
本项目采用以下任一许可证:
- Apache许可证2.0版本,(《LICENSE-APACHE》或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(《LICENSE-MIT》或https://opensource.org/licenses/MIT)
由您选择。
依赖项
~33MB
~691K SLoC