# GtiStats **Repository Path**: S_Yang/gitStats ## Basic Information - **Project Name**: GtiStats - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-08 - **Last Updated**: 2025-09-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GitStats - Git 仓库统计分析工具 [![Java](https://img.shields.io/badge/Java-17+-orange.svg)](https://www.oracle.com/java/) [![JGit](https://img.shields.io/badge/JGit-6.7.0-blue.svg)](https://www.eclipse.org/jgit/) [![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE) 一个强大的 Git 仓库统计分析工具,能够深入分析代码仓库的提交历史、贡献者活动和代码变更统计,并生成美观的可视化报告。 ## ✨ 功能特性 ### 📊 统计分析 - **提交统计**: 分析总提交数、提交时间分布 - **贡献者分析**: 统计每个贡献者的提交数、代码行数变更 - **代码行数统计**: 新增、删除、修改行数的详细统计 - **时间范围过滤**: 支持按日期范围进行统计分析 - **文件类型过滤**: 可排除特定文件类型或路径 ### 📈 多格式报告 - **JSON 报告**: 结构化数据,便于程序处理 - **CSV 报告**: 表格数据,便于 Excel 分析 - **HTML 报告**: 现代化可视化报告,包含交互式图表 ### 🎨 HTML 报告特性 - 响应式设计,支持移动端查看 - 交互式图表(基于 Chart.js) - 贡献者排行榜和详细统计 - 代码行数分布可视化 - 美观的卡片式统计展示 ## 🚀 快速开始 ### 环境要求 - Java 17 或更高版本 - Maven 3.6+ (可选,用于构建) ### 安装和运行 1. **克隆项目** ```bash git clone https://github.com/your-username/gitStats.git cd gitStats ``` 2. **编译项目** ```bash # 使用 Maven mvn clean compile # 或手动编译(如果没有 Maven) javac -encoding UTF-8 -cp "依赖jar路径" -d target/classes src/main/java/cn/yanceysong/gitstats/**/*.java ``` 3. **运行分析** ```bash java -cp "target/classes:依赖jar路径" cn.yanceysong.gitstats.GitStatsTool /path/to/your/git/repository ``` ### 使用示例 #### 基本用法 ```java // 创建配置 用法: java -jar git-stats.jar <仓库路径> [选项] 选项: --since=YYYY-MM-DD 统计开始日期 --until=YYYY-MM-DD 统计结束日期 --include-merge 包含合并提交 --exclude-path=路径 排除指定路径的文件(多个路径用逗号分隔) --help 显示此帮助信息 示例: java -jar git-stats.jar /path/to/repo java -jar git-stats.jar /path/to/repo --since=2024-01-01 --until=2024-12-31 java -jar git-stats.jar /path/to/repo --exclude-path=target,node_modules ``` #### 高级配置示例 ```java GitStatsConfig config = GitStatsConfig.builder() .since(LocalDateTime.of(2024, 1, 1, 0, 0, 0)) .until(LocalDateTime.now()) .skipMergeCommits(true) .excludedPaths(Arrays.asList("node_modules", "target", ".git")) .excludedExtensions(Arrays.asList(".log", ".tmp", ".cache")) .includeEmptyCommits(false) .build(); // 添加额外的排除路径 config.addExcludedPath("dist"); config.addExcludedExtension(".min.js"); ``` #### 批量生成报告 ```java // 生成所有格式的报告并保存到文件 ReportGenerator reportGenerator = new ReportGenerator(); reportGenerator.generateAllReports(result, "reports"); // 这将生成: // - reports/git-stats-20241208_143022.json // - reports/git-stats-20241208_143022.csv // - reports/git-stats-20241208_143022.html ``` ## 📸 效果展示 ### HTML 报告预览 #### 总体统计卡片 ``` ┌─────────────┬─────────────┬─────────────┬─────────────┐ │ 总提交数 │ 贡献者数 │ 新增行数 │ 删除行数 │ │ 150 │ 5 │ 5,000 │ 1,200 │ └─────────────┴─────────────┴─────────────┴─────────────┘ ``` #### 贡献者排行榜 ``` 排名 姓名 提交数 贡献度 新增 删除 修改 1 张三 45 ████████ 2000 500 300 2 李四 32 ██████ 1500 300 200 3 王五 28 █████ 1200 250 150 ``` #### 交互式图表 - 📊 **柱状图**: 贡献者提交数排行 - 🥧 **饼图**: 代码行数分布(新增/删除/修改) - 📱 **响应式**: 支持手机和平板查看 ## 📋 配置选项 ### GitStatsConfig 参数 | 参数 | 类型 | 默认值 | 说明 | |------|------|--------|------| | `since` | LocalDateTime | null | 统计开始时间 | | `until` | LocalDateTime | null | 统计结束时间 | | `skipMergeCommits` | boolean | true | 是否跳过合并提交 | | `excludedPaths` | List | [] | 排除的文件路径 | | `excludedExtensions` | List | [] | 排除的文件扩展名 | | `includeEmptyCommits` | boolean | false | 是否包含空提交 | ### 命令行参数(计划中) ```bash java -jar gitStats.jar [选项] <仓库路径> 选项: --since=YYYY-MM-DD 统计开始日期 --until=YYYY-MM-DD 统计结束日期 --include-merge 包含合并提交 --exclude-path=PATH 排除指定路径 --output-dir=DIR 输出目录 --help 显示帮助信息 ``` ## 📊 报告格式 ### JSON 报告 ```json { "repositoryPath": "/path/to/repo", "startTime": "2024-01-01T00:00:00", "endTime": "2024-12-31T23:59:59", "totalCommits": 150, "totalContributors": 5, "totalAddedLines": 5000, "totalDeletedLines": 1200, "totalModifiedLines": 800, "contributors": [ { "name": "张三", "email": "zhangsan@example.com", "commitCount": 45, "addedLines": 2000, "deletedLines": 500, "modifiedLines": 300 } ] } ``` ### HTML 报告预览 HTML 报告包含以下部分: - 📈 总体统计卡片 - 📊 贡献者提交数排行图表 - 🥧 代码行数分布饼图 - 📋 详细贡献者统计表格 ## 🏗️ 项目结构 ``` src/main/java/cn/yanceysong/gitstats/ ├── GitStatsTool.java # 主程序入口 ├── analyzer/ │ └── GitStatsAnalyzer.java # 核心分析器 ├── config/ │ └── GitStatsConfig.java # 配置类 ├── model/ # 数据模型 │ ├── GitStatsResult.java │ ├── ContributorStats.java │ ├── CommitStats.java │ └── FileTypeStats.java └── report/ # 报告生成器 └── ReportGenerator.java ``` ## 🔧 技术栈 - **Java 17**: 核心开发语言 - **JGit**: Git 仓库操作库 - **Lombok**: 简化 Java 代码 - **FastJSON2**: JSON 序列化 - **SLF4J + Logback**: 日志框架 - **Chart.js**: HTML 报告图表库 ## 🤝 贡献指南 欢迎贡献代码!请遵循以下步骤: 1. Fork 本项目 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 创建 Pull Request ## 📝 更新日志 ### v1.0.0 (2024-12-XX) - ✨ 初始版本发布 - 📊 支持基本的 Git 统计分析 - 📈 生成 JSON、CSV、HTML 三种格式报告 - 🎨 现代化 HTML 报告界面 - 📱 响应式设计支持 ## 📄 许可证 本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。 ## 🙏 致谢 - [JGit](https://www.eclipse.org/jgit/) - 优秀的 Java Git 库 - [Chart.js](https://www.chartjs.org/) - 强大的图表库 - [Lombok](https://projectlombok.org/) - 简化 Java 开发 ## 🔍 故障排除 ### 常见问题 **Q: 编译时出现编码错误** ``` A: 使用 -encoding UTF-8 参数: javac -encoding UTF-8 ... ``` **Q: 找不到 JGit 相关类** ``` A: 确保 JGit JAR 文件在 classpath 中: -cp "path/to/jgit.jar:other-deps.jar" ``` **Q: 内存不足错误** ``` A: 增加 JVM 堆内存: java -Xmx2g -cp ... ``` **Q: 大型仓库分析很慢** ``` A: 考虑使用时间范围过滤: config.since(LocalDateTime.of(2024, 1, 1, 0, 0, 0)) ``` ### 性能优化建议 1. **使用时间过滤**: 对于大型仓库,建议设置 `since` 和 `until` 参数 2. **排除不必要文件**: 使用 `excludedPaths` 排除 `node_modules`、`target` 等目录 3. **跳过合并提交**: 保持 `skipMergeCommits=true` 以提高性能 4. **增加内存**: 对于超大仓库,适当增加 JVM 堆内存 ## 🛠️ 开发指南 ### 本地开发环境搭建 1. **安装依赖** ```bash # 确保安装了 Java 17+ java -version # 安装 Maven(可选) mvn -version ``` 2. **IDE 配置** - 推荐使用 IntelliJ IDEA 或 Eclipse - 安装 Lombok 插件 - 设置项目编码为 UTF-8 3. **运行测试** ```bash # 编译项目 mvn compile # 运行主程序 java -cp target/classes:dependencies/* cn.yanceysong.gitstats.GitStatsTool . ``` ### 添加新功能 1. **扩展统计指标**: 在 `ContributorStats` 或 `CommitStats` 中添加新字段 2. **新增报告格式**: 在 `ReportGenerator` 中添加新的生成方法 3. **自定义过滤器**: 扩展 `GitStatsConfig` 配置选项 --- ⭐ 如果这个项目对您有帮助,请给个 Star! 🔄 欢迎 Fork 并提交 Pull Request! 📢 分享给更多需要的开发者!