3个版本 (破坏性)

0.3.0 2024年2月24日
0.2.0 2024年2月20日
0.1.0 2024年2月15日

#1552 in 开发工具

MIT/Apache

29KB
295

git-query

git-query 是一款强大的命令行工具,用于使用SQL查询和分析Git仓库的提交历史。

安装

确保您系统上已安装 Rust。然后,使用以下命令安装 git-query

cargo install git-query

用法

  1. 打开终端并导航到您要查询的Git仓库。
  2. 运行git-query命令
    git-query
    
    这将启动程序并执行初始SQL查询,显示仓库的最新提交。
  3. 然后您可以针对提交表运行SQL查询。例如,要检索特定时间范围内的提交
    SELECT * FROM commits WHERE date BETWEEN '2022-01-01 00:00:00 UTC' AND '2022-12-31 23:59:59 UTC';
    
  4. 要退出程序,只需输入以下命令
    exit
    

要加载来自不存在的提交(例如另一个分支中的提交)的附加提交历史,可以使用 traverse 命令: traverse <提交ID>

如果您只想检索特定分支的提交历史,请在运行 git-query 之前导航到该分支(使用 git checkout)。

以下提供可以查询的SQL表的信息和数据。

提交

  • id:提交ID
  • author:提交作者
  • date:提交日期时间
  • message:提交信息

分支

  • name:分支名称
  • type:分支类型(远程或本地)
  • head_commit_id:HEAD提交ID
  • head_commit_date:HEAD提交的日期时间

标签

  • id:标签ID
  • name:标签名称
  • 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    ┆ 261.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    ┆ 61.0.196   ┆         ┆ 61.0.196  │
│         ┆           ┆ 22:00:35  ┆           ┆         ┆ 22:00:35  ┆          │
│         ┆           ┆ UTC       ┆           ┆         ┆ UTC       ┆          │
└─────────┴───────────┴───────────┴───────────┴─────────┴───────────┴──────────┘
Rows returned: 1

提示

  • 利用标准SQL查询从Git提交历史中提取有价值的见解。
  • 尝试不同的查询以根据您的特定需求定制结果。
  • 有关高级SQL语法,请参阅SQLite文档

许可证

本项目采用以下任一许可证:

由您选择。

依赖项

~33MB
~691K SLoC