# Git Statistics
![app-icon](app/src-tauri/icons/128x128.png)
从 Git 仓库中收集提交信息并以友好的方式呈现统计数据。 ## 特性 - 为每个用户统计提交信息,包括以下维度: 1. 提交数量 2. 文件修改数据量 3. 新增代码行数 4. 删除代码行数 5. 修改的代码行数(新增代码行数 + 删除代码行数) 统计结果会排除合并提交,并且不包含被标记为 rename 和 move 的修改。你可以在此之上指定 `PATHSPEC` 以执行更精确的匹配。 ## 安装 克隆仓库: ```shell git clone https://github.com/hyzmm/git-statistics cd git-statistics ``` 安装 CLI: ```shell cargo install --path . ``` 如果你想要体验 UI 版应用程序时,可以运行以下命令: ```shell cargo tauri dev ``` 或者制作应用程序安装包,运行以下命令构建它: ```shell cd app/ npm i npm run build cargo tauri build ``` 在 macOS 上,生成的安装包位于 *target/release/bundle/dmg*。 ## CLI Usage 输入 `git stats -h` 查看完整的帮助信息: ```shell git stats -h This tool provides comprehensive statistics for each user in the current repository. Usage: git-stats [OPTIONS] [-- ...] Arguments: [PATHSPEC]... A glob pattern to match against file paths. src, *.rs, or src/**/*.rs etc Options: -s, --sort Sort by the specified column. The default is unordered [possible values: commits, files-changed, insertions, deletions, lines-changed] -c, --max-count Limit the number of ros to show -h, --help Print help (see more with '--help') -V, --version Print version ``` 这是一个统计 [bevy](https://github.com/bevyengine/bevy) 仓库的例子,进入仓库目录并运行: ```shell $ git stats -c 5 -s commits ██████████████████████████████████████████████████████████████████████ 2820/2820 ┌──────────────┬─────────┬─────────┬──────────────┬──────────────┬─────────────┐ │ Author ┆ Commits ┆ Files ┆ Insertions ┆ Deletions ┆ Lines │ │ ┆ ┆ Changed ┆ ┆ ┆ Changed │ ╞══════════════╪═════════╪═════════╪══════════════╪══════════════╪═════════════╡ │ Carter ┆ 1059 ┆ 16247 ┆ 723427 ┆ 682678 ┆ 1406105 │ │ Anderson ┆ (72%) ┆ (89%) ┆ (94%) ┆ (98%) ┆ (96%) │ ├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤ │ François ┆ 214 ┆ 995 ┆ 17871 ┆ 7333 ┆ 25204 │ │ ┆ (15%) ┆ (5%) ┆ (2%) ┆ (1%) ┆ (2%) │ ├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤ │ Robert Swain ┆ 76 ┆ 421 ┆ 18941 ┆ 3401 ┆ 22342 │ │ ┆ (5%) ┆ (2%) ┆ (2%) ┆ (0%) ┆ (2%) │ ├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤ │ Jakob ┆ 62 ┆ 250 ┆ 4825 ┆ 1516 ┆ 6341 │ │ Hellermann ┆ (4%) ┆ (1%) ┆ (1%) ┆ (0%) ┆ (0%) │ ├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤ │ Daniel McNab ┆ 57 ┆ 248 ┆ 2508 ┆ 2711 ┆ 5219 │ │ ┆ (4%) ┆ (1%) ┆ (0%) ┆ (0%) ┆ (0%) │ └──────────────┴─────────┴─────────┴──────────────┴──────────────┴─────────────┘ ``` 这表示打印按照提交次数排名前 5 的作者。 CLI 有下列参数: | 参数 | 描述 | |-------------|------------------------------------------------------------------------------------------------------------------------------------------| | `sort` | 用户的排序方式,默认是无序的。有这 5 种排序方式: commits, files-changed, insertions, deletions, lines-changed。 | | `max-count` | 限制打印的行数。 | | `PATHSPEC` | glob 模式的匹配路径. 例如 `src`, `*.rs`, 或者 `src/**/*.rs`。
以 `:!` 为前缀可以排除指定路径,例如: `git stats -- ':!src/assets'` 可以排除 `src/assets` 下的所有文件。 | ### 匹配指定路径 这个例子展示了如何只统计 **src** 目录下的所有路径,以及 **crates** 目录下的 *rs* 文件。 ```shell git stats -s commits -c 5 -- src crates/**/*.rs ``` ### 排除指定路径 ```shell git stats -s commits -c 5 -- src crates ':!crates/bevy_core' ``` 排除路径的格式和匹配路径一样,只是多了以 `:!` 为前缀。 ## 应用程序 这是一些应用程序的截图: ![screenshots](https://github.com/hyzmm/git-statistics/assets/48704743/99521b73-2bf7-404a-a5fd-6d62663b9dc2) ## 待办 - 更多的统计方法。 - 提供更多的安装渠道。