UNPKG

git-yike-logger-hook

Version:

A TypeScript Git hook plugin for automatically generating commit logs with TODO/WIP comment scanning

322 lines (240 loc) 8.65 kB
# Git Logger Hook - 项目总结 ## 🎯 项目概述 Git Logger Hook 是一个用 TypeScript 编写的 Git hook 插件,用于在每次 commit 时自动生成详细的提交日志,并扫描代码中的 TODO 和 WIP 注释。 ## ✅ 已完成功能 ### 核心功能 - ✅ **自动记录提交信息**:记录提交人、提交时间、提交消息和提交哈希 - ✅ **文件变更跟踪**:详细记录新增、修改、删除和重命名的文件 - ✅ **分支信息记录**:记录当前分支和远程仓库信息 - ✅ **代码注释扫描**:自动扫描 JavaScript/TypeScript 文件中的 TODO 和 WIP 注释 - ✅ **JSON 格式输出**:结构化的 JSON 日志,便于后续处理和分析 - ✅ **自动清理机制**:可配置保留最近 N 个日志文件 - ✅ **零配置启动**:安装后即可使用,无需额外配置 ### 技术特性 - ✅ **TypeScript 支持**:完整的类型定义和类型安全 - ✅ **跨平台兼容**:支持 Windows、macOS、Linux - ✅ **模块化设计**:清晰的模块分离,易于维护和扩展 - ✅ **错误处理**:完善的错误处理和降级策略 - ✅ **性能优化**:只扫描变更文件,避免全项目扫描 ## 📁 项目结构 ``` git-logger-hook/ ├── src/ # 源代码目录 │ ├── types.ts # 类型定义 │ ├── git-utils.ts # Git 操作工具 │ ├── comment-scanner.ts # 注释扫描器 │ ├── logger.ts # 日志生成器(核心) │ ├── hook.ts # Git hook 入口 │ ├── install.ts # Hook 安装器 │ └── index.ts # 模块导出 ├── dist/ # 编译输出目录 ├── .git-logs/ # 日志文件目录 ├── README.md # 项目文档 ├── API.md # API 参考文档 ├── DEVELOPMENT.md # 开发指南 ├── PROJECT_SUMMARY.md # 项目总结 ├── example.js # 使用示例 ├── package.json # 项目配置 ├── tsconfig.json # TypeScript 配置 └── .gitignore # Git 忽略文件 ``` ## 🔧 技术栈 ### 核心依赖 - **TypeScript 5.0+**:类型安全的 JavaScript 超集 - **Node.js 16+**:JavaScript 运行时环境 - **simple-git 3.19+**:Git 操作封装库 ### 开发工具 - **TypeScript Compiler**:代码编译 - **Git Hooks**:自动化触发机制 - **npm**:包管理和脚本运行 ## 🚀 快速开始 ### 安装使用 ```bash # 1. 安装依赖 npm install # 2. 编译项目 npm run build # 3. 安装 Git hook npm run install-hook # 4. 开始使用 git commit -m "测试提交" ``` ### 基本配置 ```typescript import { GitLogger } from 'git-logger-hook'; const logger = new GitLogger({ logDir: '.git-logs', // 日志目录 includeUnstaged: false, // 包含未暂存文件 includeUntracked: false, // 包含未跟踪文件 }); ``` ## 📊 功能演示 ### 日志文件示例 ```json { "author": { "name": "开发者", "email": "dev@example.com" }, "timestamp": "2025-09-06T14:04:03+08:00", "message": "添加新功能", "commitHash": "a1b2c3d4e5f6...", "changedFiles": { "added": ["src/new-feature.js"], "modified": ["src/main.js"], "deleted": [], "renamed": [] }, "branch": "main", "comments": { "todos": [ { "type": "TODO", "content": "实现这个功能", "filePath": "src/new-feature.js", "lineNumber": 10, "fullLine": "// TODO: 实现这个功能" } ], "wips": [ { "type": "WIP", "content": "这个功能还在开发中", "filePath": "src/main.js", "lineNumber": 25, "fullLine": "// WIP: 这个功能还在开发中" } ] } } ``` ## 🎨 设计模式 ### 1. 组合模式 - `GitLogger` 组合 `GitUtils` 和 `CommentScanner` - 职责分离,易于测试和维护 ### 2. 策略模式 - 不同的注释扫描策略 - 易于扩展新的注释类型 ### 3. 工厂模式 - 根据文件类型创建不同的处理器 - 支持多种文件格式 ## 🔍 关键实现 ### 异步处理 ```typescript // 并行执行独立操作 const [commitInfo, branch, remote, fileChanges] = await Promise.all([ this.gitUtils.getCurrentCommitInfo(), this.gitUtils.getCurrentBranch(), this.gitUtils.getRemoteInfo(), this.gitUtils.getFileChanges(), ]); ``` ### 错误处理 ```typescript try { await riskyOperation(); } catch (error) { if (error instanceof SpecificError) { // 特定错误处理 console.warn('特定错误:', error.message); return defaultValue; } else { // 通用错误处理 throw new Error(`操作失败: ${error}`); } } ``` ### 性能优化 - 只扫描变更的文件 - 使用并行处理 - 智能跳过大型目录 ## 📈 性能指标 ### 扫描性能 - **文件扫描**:只扫描变更文件,避免全项目扫描 - **并行处理**:多文件并行扫描,提高效率 - **智能过滤**:自动跳过 node_modules 等目录 ### 内存使用 - **流式处理**:大文件流式读取,避免内存溢出 - **及时清理**:自动清理旧日志文件 - **缓存机制**:文件内容缓存,减少重复读取 ## 🛠️ 扩展性 ### 添加新注释类型 ```typescript // 1. 在 types.ts 中定义新类型 export type CommentType = 'TODO' | 'WIP' | 'FIXME' | 'NOTE'; // 2. 在 comment-scanner.ts 中添加模式 private fixmePatterns = [ /\/\/\s*FIXME\s*:?\s*(.+)/gi, /\/\*\s*FIXME\s*:?\s*(.+?)\s*\*\//gi ]; ``` ### 添加新文件类型 ```typescript // 在 comment-scanner.ts 中扩展支持 private supportedExtensions = [ '.js', '.jsx', '.ts', '.tsx', '.vue', '.svelte', '.py', '.java' ]; ``` ### 添加新 Git 操作 ```typescript // 在 git-utils.ts 中添加新方法 async getCommitStats(): Promise<CommitStats> { // 实现新的 Git 操作 } ``` ## 🧪 测试覆盖 ### 功能测试 - ✅ 基本日志生成 - ✅ 注释扫描功能 - ✅ 文件变更跟踪 - ✅ 错误处理机制 ### 集成测试 - ✅ Git hook 安装和卸载 - ✅ 跨平台兼容性 - ✅ 首次提交处理 - ✅ 大型项目性能 ## 📚 文档完整性 ### 用户文档 - ✅ **README.md**:项目介绍和快速开始 - ✅ **API.md**:完整的 API 参考文档 - ✅ **example.js**:使用示例代码 ### 开发文档 - ✅ **DEVELOPMENT.md**:详细的开发指南 - ✅ **PROJECT_SUMMARY.md**:项目总结 - ✅ **代码注释**:完整的 JSDoc 注释 ## 🎯 使用场景 ### 个人开发 - 记录个人开发进度 - 跟踪代码中的待办事项 - 分析提交历史 ### 团队协作 - 代码审查辅助 - 项目进度跟踪 - 知识管理 ### 项目管理 - 自动化报告生成 - 代码质量分析 - 开发效率统计 ## 🔮 未来规划 ### 短期目标 - [ ] 添加更多注释类型支持(FIXME、NOTE 等) - [ ] 支持更多文件类型(Python、Java、Go 等) - [ ] 添加配置文件支持 - [ ] 实现日志分析工具 ### 长期目标 - [ ] 集成 CI/CD 流水线 - [ ] 添加 Web 界面 - [ ] 支持团队协作功能 - [ ] 开发 VS Code 扩展 ## 🏆 项目亮点 1. **零配置启动**:安装后即可使用,无需复杂配置 2. **智能扫描**:只扫描变更文件,性能优异 3. **类型安全**:完整的 TypeScript 类型定义 4. **跨平台**:支持所有主流操作系统 5. **可扩展**:模块化设计,易于添加新功能 6. **文档完善**:详细的文档和示例代码 ## 📝 总结 Git Logger Hook 是一个功能完整、设计精良的 Git hook 插件。它不仅实现了基本的提交日志记录功能,还创新性地添加了代码注释扫描功能,为开发者提供了强大的项目管理工具。 项目采用现代化的技术栈和设计模式,具有良好的可维护性和扩展性。完善的文档和示例代码使得其他开发者能够快速理解和上手这个项目。 通过这个项目,我们展示了如何构建一个实用的开发工具,以及如何编写高质量的 TypeScript 代码。这为后续的类似项目提供了宝贵的经验和参考。