# gitCommitAnalyzer **Repository Path**: sea_lx/gitCommitAnalyzer ## Basic Information - **Project Name**: gitCommitAnalyzer - **Description**: Git提交记录分析工具,一个跨平台的Git提交记录分析工具,用于提取指定时间范围内的所有文件路径,用于代码安全检查 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-25 - **Last Updated**: 2026-04-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Git提交记录分析工具 一个跨平台的Git提交记录分析工具,用于提取指定时间范围内的所有文件路径,用于代码安全检查。支持Python、Node.js和Shell三版本实现。同时提供Web可视化界面,方便用户通过浏览器查看和分析提交记录。 ## 目录 - [功能特点](#功能特点) - [安装依赖](#安装依赖) - [使用方法](#使用方法) - [示例输出](#示例输出) - [技术实现](#技术实现) - [项目结构](#项目结构) - [注意事项](#注意事项) - [常见问题](#常见问题) - [三版本工具对比](#三版本工具对比) - [许可证](#许可证) ## 功能特点 ### 命令行工具 - **跨平台支持**:可在Windows、Mac和Linux上运行 - **灵活的筛选条件**:支持按commitId范围、时间范围、分支和作者筛选 - **多种查询方式**:支持commitId查询和时间范围查询两种方式 - **多个作者输入**:支持用逗号分割输入多个作者,多个作者之间是"或"关系 - **分支选择**:支持通过序号选择分支或直接输入分支名称 - **文件类型过滤**:默认全选扫描到的文件类型;若未扫描到文件类型,则回退为 `js, vue, ts, tsx, jsx, wxml, wxss, json` - **时间范围默认值**:开始时间默认上个月1号,结束时间默认今天 - **灵活的时间格式**:支持 `YYYY-MM-DD`、`YYYY-MM-DD HH:MM` 和 `YYYY-MM-DD HH:MM:SS` 等多种格式 - **时间精确到秒**:支持精确到秒的时间范围查询,用户输入包含时间则直接使用,否则自动添加 00:00:00 或 23:59:59 - **自动去重**:确保输出的文件路径唯一 - **详细的错误处理**:提供友好的错误提示 - **完整的文件路径**:输出文件的绝对路径,方便直接使用 - **作者信息追踪**:每个文件都附带作者信息,便于代码溯源 ### Web 可视化工具 - 🌐 现代化 Web 界面 - 📁 支持设置任意 Git 仓库路径 - 🌿 查看所有分支的提交记录(按时间倒序排列) - 👥 按作者筛选提交(支持多个作者,"或"关系) - 📅 按时间范围筛选提交(默认最近 1 个月,精确到秒) - 📝 查看每个提交的详细文件变更 - 📦 支持多选文件导出为压缩包 - 🔍 分支和作者支持搜索功能 - 🚀 双版本支持:Node.js 和 Python 后端 - 🔄 分支切换后自动检查并拉取最新更新 - 🌍 CDN 自动切换备选方案,确保资源加载稳定 - 💡 详细的错误提示,如分支切换失败原因 - 📊 **提交详情查看**: - 点击提交即可查看详细信息 - 显示提交哈希、作者、时间、父提交等信息 - 显示完整的提交消息 - 统计代码变更行数(添加和删除) - 📁 **文件变更列表**: - 显示提交中所有变更的文件 - 标注每个文件的操作类型(新增、修改、删除、重命名等) - 支持查看每个文件的详细 diff - 🔍 **代码 Diff 查看**: - 语法高亮显示代码变更 - 显示行号,方便定位 - 清晰标注添加(绿色)和删除(红色)的行 - 支持查看文件完整内容(第一个提交时) ## 安装依赖 ### 命令行工具 | 版本 | 安装命令 | 运行命令 | |------|----------|----------| | Python | 无需安装 | `python3 src/python/index.py` | | Node.js | `npm install` | `npm start` | | Shell | 无需安装 | `chmod +x src/shell/index.sh && ./src/shell/index.sh` | ### Web可视化工具 | 版本 | 安装命令 | 运行命令 | 访问地址 | |------|----------|----------|----------| | Node.js | `npm install` | `npm run visualize` | http://localhost:3001 | | Python | `pip install -r requirements.txt` | `python src/visualize/python/server.py` | http://localhost:3001 | **Python版本额外选项**: - 指定端口:`python src/visualize/python/server.py --port 5001` - 不自动打开浏览器:`python src/visualize/python/server.py --no-browser` ## 使用方法 ### 通用步骤 1. **运行工具**:根据不同版本选择对应的命令 2. **输入参数**:按照提示输入项目路径、查询方式、时间范围、分支和作者信息 3. **分析提交**:工具会分析指定时间范围内的Git提交记录 4. **选择压缩**:分析完成后,可选择是否复制文件并压缩为zip包 5. **输入文件名**:如果选择压缩,可输入自定义zip文件名 6. **完成**:工具会创建zip文件并保存在output文件夹中 ### 查询方式说明 本工具支持两种查询方式: 1. **commitId查询(默认)**:通过输入开始和结束commitId来查询两个提交之间的所有文件变更 2. **时间范围查询**:通过输入开始和结束日期来查询指定时间范围内的所有文件变更 ### 自动检测版本(推荐) 使用启动脚本自动检测并运行合适的版本: ```bash chmod +x run.sh ./run.sh ``` 启动脚本会自动检测当前环境中可用的Python、Node.js或Shell版本,并选择合适的版本运行。脚本支持以下选项: - Python 版本 - Node.js 版本 - Shell 版本 - Node.js 可视化版本 - Python 可视化版本 **启动脚本特点**: - 🤖 自动检测环境并选择合适的版本运行 - 📦 自动检查并安装所需依赖(Python 和 Node.js) - 🔄 支持自动升级 pip 到最新版本 - 🚪 自动检查并杀掉占用端口 3001 的进程 - 📊 安装依赖时显示进度条 - 🌍 跨平台支持:Windows、Mac 和 Linux - 🛠 详细的错误处理和提示信息 - 💡 提供手动安装指南,当自动安装失败时 ### 可视化版本特点 - **Node.js 可视化版本**:访问 http://localhost:3001 - **Python 可视化版本**:访问 http://localhost:3001 - **双版本支持**:两种后端版本提供相同的功能,可根据环境选择使用 ## 示例输出 ### commitId查询模式 ``` Git提交记录分析工具 用于提取指定时间范围内的所有文件路径,用于代码安全检查 ================================================================================ 请输入项目路径: /path/to/your/project 请选择查询方式: 1. commitId查询(默认) 2. 时间范围查询 请输入选项 (1-2) [默认: 1]: 请输入开始commitId: abc123 请输入结束commitId: def456 正在获取可用分支... 可用分支: 1. dev 2. master 请输入分支序号或名称 (用逗号分割,默认: dev分支): 1 正在分析 /path/to/your/project 仓库的提交记录... commitId范围: abc123 到 def456 分支: dev 分析完成!找到 15 个唯一文件路径: ================================================================================ /path/to/your/project/src/app.js (作者: 张三) /path/to/your/project/src/components/Header.js (作者: 李四, 张三) /path/to/your/project/src/components/Footer.js (作者: 李四) /path/to/your/project/src/utils/helpers.js (作者: 未知) /path/to/your/project/package.json (作者: 张三) ================================================================================ 总计: 15 个文件路径 ``` ### 时间范围查询模式 ``` Git提交记录分析工具 用于提取指定时间范围内的所有文件路径,用于代码安全检查 ================================================================================ 请输入项目路径: /path/to/your/project 请选择查询方式: 1. commitId查询(默认) 2. 时间范围查询 请输入选项 (1-2) [默认: 1]: 2 请输入开始时间 (格式: YYYY-MM-DD) [默认: 2024-01-01]: 2024-01-01 请输入结束时间 (格式: YYYY-MM-DD) [默认: 2024-01-31]: 2024-01-31 正在获取可用分支... 可用分支: 1. dev 2. master 请输入分支序号或名称 (用逗号分割,默认: dev分支): 1 正在获取可用作者... 可用作者: 1. 张三 2. 李四 请输入作者序号或名称(用逗号分割多个作者,默认: 0 表示全部作者): 正在分析 /path/to/your/project 仓库的提交记录... 时间范围: 2024-01-01 到 2024-01-31 分支: dev 作者: 全部作者 分析完成!找到 15 个唯一文件路径: ================================================================================ /path/to/your/project/src/app.js (作者: 张三) /path/to/your/project/src/components/Header.js (作者: 李四, 张三) /path/to/your/project/src/components/Footer.js (作者: 李四) /path/to/your/project/src/utils/helpers.js (作者: 未知) /path/to/your/project/package.json (作者: 张三) ================================================================================ 总计: 15 个文件路径 是否需要复制文件并压缩为zip包?(y/n) [y]: 请输入zip文件名 (默认: 需求版本-变更的代码) [需求版本-变更的代码]: 正在复制文件到临时目录... 正在创建zip文件... 成功创建zip文件:/path/to/gitCommitAnalyzer/output/需求版本-变更的代码.zip 复制了 15 个文件 ``` ## 技术实现 ### Python版本 - **编程语言**:Python 3.x - **Git操作**:直接执行git命令(通过subprocess) - **用户界面**:命令行界面 - **依赖管理**:无需依赖 ### Node.js版本 - **编程语言**:Node.js - **Git操作**:直接执行git命令 - **用户界面**:命令行界面(使用inquirer库) - **依赖管理**:npm - **文件操作**:使用fs-extra库 - **压缩功能**:使用adm-zip库 ### Shell版本 - **编程语言**:Bash/Shell - **Git操作**:直接执行git命令 - **用户界面**:命令行界面 - **依赖管理**:无依赖 - **文件操作**:使用标准Shell命令 - **压缩功能**:使用系统zip命令 - **性能优化**:使用管道命令组合进行高效处理 - **跨平台支持**:兼容Linux、macOS和Windows Git Bash ## 项目结构 ``` gitCommitAnalyzer/ ├── src/ │ ├── python/ # Python版本 │ │ └── index.py # 主脚本文件 │ ├── nodejs/ # Node.js版本 │ │ └── index.js # 主脚本文件 │ ├── shell/ # Shell版本 │ │ └── index.sh # 主脚本文件 │ └── visualize/ # 可视化工具 │ ├── nodejs/ # Node.js版本可视化 │ │ └── server.js # 服务器脚本 │ └── python/ # Python版本可视化 │ └── server.py # 服务器脚本 ├── public/ # 公共前端文件 │ └── index.html # 可视化工具前端页面 ├── output/ # 输出目录 ├── requirements.txt # Python可视化版本依赖管理文件 ├── package.json # Node.js版本依赖管理文件 ├── package-lock.json # Node.js版本依赖锁定文件 ├── run.sh # 启动脚本 ├── LICENSE # 许可证文件 └── README.md # 项目说明文档 ``` ## 注意事项 1. 确保输入的项目路径是有效的Git仓库 2. commitId必须是仓库中存在的提交 3. 时间格式支持多种格式:`YYYY-MM-DD`、`YYYY-MM-DD HH:MM` 或 `YYYY-MM-DD HH:MM:SS` 4. 分支名称必须是仓库中存在的分支 5. 作者选择时,输入0表示选择全部作者 ## 常见问题 ### 1. 运行时出现"错误:无法初始化git仓库"怎么办? - 检查输入的项目路径是否正确 - 确保该路径是一个有效的Git仓库(包含.git目录) ### 2. 分析完成后没有找到文件路径怎么办? - 检查commitId或时间范围是否正确 - 检查分支名称是否存在 - 检查作者名称是否正确 - 确认该范围内有提交记录 ### 3. 工具在Windows上运行时需要注意什么? - **Python版本**: - 确保已安装Python 3.x - 在命令提示符或PowerShell中运行 - 路径输入格式为Windows格式(如:C:\path\to\project) - **Node.js版本**: - 确保已安装Node.js - 在命令提示符或PowerShell中运行 - 路径输入格式为Windows格式(如:C:\path\to\project) ### 4. Node.js版本运行时出现"错误:分析提交记录失败"怎么办? - 检查git命令是否正确安装 - 确保输入的项目路径是有效的Git仓库 - 检查分支名称是否存在 - 检查作者名称是否正确 - 确认该时间范围内有提交记录 ### 5. Shell版本运行时需要注意什么? - **Linux/macOS**: - 确保脚本有执行权限:`chmod +x src/shell/index.sh` - 直接运行:`./src/shell/index.sh` - **Windows**: - 在Git Bash或WSL中运行 - 确保git命令可用 - 路径输入格式为Unix格式(如:/c/path/to/project) ### 6. Shell版本运行时出现"Permission denied"错误怎么办? - 确保脚本有执行权限:`chmod +x src/shell/index.sh` - 以管理员权限运行终端(Windows) ### 7. 作者信息是如何获取的? - 使用`git log --name-only --format='%an'`命令获取提交记录中的作者信息 - commitId查询时会获取两个commit本身以及它们之间所有commit的文件和作者信息 - 如果无法获取作者信息,会显示为"未知" - 支持多个作者,可以显示文件的所有关联作者 ### 8. commitId查询是如何工作的? commitId查询采用了精准的分支内commit范围定位机制: - **获取分支完整历史**:使用 `git rev-list --reverse 分支名` 获取该分支上的所有commit(按时间顺序) - **定位两个commit**:在列表中找到用户输入的两个commit的位置(支持前缀匹配) - **确定正确范围**:自动识别两个commit的实际顺序,找到最小和最大索引 - **逐个获取变更**:遍历这个范围,逐个使用 `git show` 获取每个commit的文件变更和作者信息 - **支持任意输入顺序**:无论用户输入的commit顺序如何,都能正确获取它们之间的所有提交 ### 9. 时间范围查询支持哪些格式? 时间范围查询支持多种灵活的时间格式: - **只包含日期**:`YYYY-MM-DD`(如 `2026-02-01`)→ 自动添加 `00:00:00`(开始时间)或 `23:59:59`(结束时间) - **包含小时和分钟**:`YYYY-MM-DD HH:MM`(如 `2026-02-01 14:30`)→ 直接使用 - **完整时间格式**:`YYYY-MM-DD HH:MM:SS`(如 `2026-02-01 14:30:45`)→ 直接使用 ### 10. 代码做了哪些优化? 三个版本(Shell/Node/Python)都进行了全面优化: - **抽取重复代码为函数**: - `get_git_log_output()` - 统一获取git log输出 - `select_from_list()` - 统一的列表选择函数 - `extract_file_paths_with_authors()` - 提取文件路径和作者信息 - `get_commits_between_with_authors()` - 获取两个commit之间的所有提交(带作者信息) - `get_commits_between_files_only()` - 获取两个commit之间的所有文件变更 - **统一代码结构**:三个版本的代码结构保持一致 - **提高可维护性**:减少代码重复,使修改和扩展更方便 - **保持功能完整**:所有原有功能都保留,包括commitId查询、时间范围查询、作者选择、文件类型过滤等 ### 11. 可视化版本有哪些新特性? - **分支管理**: - 分支按时间倒序排列,方便查找 - 分支切换后自动检查并拉取最新更新 - 详细的分支切换错误提示,如分支不存在、当前分支有未提交的更改等 - 支持本地分支和远程分支 - **前端优化**: - CDN 自动切换备选方案,当主要 CDN 加载失败时,自动尝试备选 CDN - 时间范围选择精确到秒 - 作者多选时使用"或"关系,而非"且"关系 - 分支和作者支持搜索功能 - **提交详情查看**: - 点击提交即可查看详细信息 - 显示提交哈希、作者、时间、父提交等基本信息 - 显示完整的提交消息 - 统计代码变更行数(添加和删除的行数) - 列出所有变更的文件及其操作类型(新增、修改、删除等) - 支持查看每个文件的详细 diff,带语法高亮和行号 - **启动脚本优化**: - 自动检测环境并选择合适的版本运行 - 自动检查并安装所需依赖 - 支持自动升级 pip 到最新版本 - 自动检查并杀掉占用端口 3001 的进程 - 安装依赖时显示进度条 - 跨平台支持:Windows、Mac 和 Linux - 详细的错误处理和提示信息 - 提供手动安装指南,当自动安装失败时 ### 12. 如何在可视化版本中查看提交的详细信息? 在可视化版本中,您可以通过以下方式查看提交的详细信息: 1. **查看提交列表**:在搜索框中输入时间范围和选择作者后,点击"搜索"按钮 2. **点击提交**:在提交列表中点击任意一个提交的"查看详情"按钮 3. **查看提交详情**:在弹出的对话框中,您可以看到: - 提交哈希、作者、时间、父提交等基本信息 - 完整的提交消息 - 代码变更统计(添加了 X 行,删除了 Y 行) - 所有变更文件的列表,每个文件标注了操作类型(新增/修改/删除/重命名等) 4. **查看文件 Diff**:点击文件列表中的"查看变更"按钮,可以查看该文件的详细变更: - 语法高亮的代码显示 - 行号显示 - 绿色背景表示添加的行 - 红色背景表示删除的行 - 灰色背景表示上下文行(未变更的代码) ### 13. 可视化版本支持哪些后端? 可视化版本支持两种后端实现: - **Node.js 版本**:使用 Express 框架,性能优秀,适合熟悉 Node.js 的用户 - **Python 版本**:使用 Flask 框架,依赖简单,适合熟悉 Python 的用户 两个版本提供完全相同的功能和 API 接口,您可以根据个人喜好和环境选择合适的版本。 ## 三版本工具对比 | 功能 | Python版本 | Node.js版本 | Shell版本 | |----------------------------------|------------|-------------|-----------| | 跨平台支持 | ✅ | ✅ | ✅ | | commitId查询 | ✅ | ✅ | ✅ | | 时间范围查询 | ✅ | ✅ | ✅ | | 分支选择(序号/名称) | ✅ | ✅ | ✅ | | 作者选择(序号/名称) | ✅ | ✅ | ✅ | | 多个作者输入(用逗号分割) | ✅ | ✅ | ✅ | | 文件类型过滤 | ✅ | ✅ | ✅ | | 时间范围默认值(上个月1号到今天)| ✅ | ✅ | ✅ | | 时间精确到秒 | ✅ | ✅ | ✅ | | 文件复制和压缩(保留文件夹结构) | ✅ | ✅ | ✅ | | 友好的错误处理 | ✅ | ✅ | ✅ | | 完整的文件路径输出 | ✅ | ✅ | ✅ | | 无依赖运行 | ✅ | ❌ | ✅ | | 性能优化 | ✅ | ✅ | ✅ | ## 许可证 本工具为开源项目,可自由使用和修改。