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
Markdown
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
│ ├── comment-scanner.ts
│ ├── logger.ts
│ ├── hook.ts
│ ├── install.ts
│ └── index.ts
├── dist/
├── .git-logs/
├── README.md
├── API.md
├── DEVELOPMENT.md
├── PROJECT_SUMMARY.md
├── example.js
├── package.json
├── tsconfig.json
└── .gitignore
```
- **TypeScript 5.0+**:类型安全的 JavaScript 超集
- **Node.js 16+**:JavaScript 运行时环境
- **simple-git 3.19+**:Git 操作封装库
- **TypeScript Compiler**:代码编译
- **Git Hooks**:自动化触发机制
- **npm**:包管理和脚本运行
```bash
npm install
npm run build
npm run install-hook
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: 这个功能还在开发中"
}
]
}
}
```
- `GitLogger` 组合 `GitUtils` 和 `CommentScanner`
- 职责分离,易于测试和维护
- 不同的注释扫描策略
- 易于扩展新的注释类型
- 根据文件类型创建不同的处理器
- 支持多种文件格式
```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'
];
```
```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 代码。这为后续的类似项目提供了宝贵的经验和参考。