Spelungit:当git log --grep
不够用时
支持大型代码库具有挑战性。有时,你遇到的问题无法通过现有代码得到解答。例如,“我们何时从类组件切换到钩子,是什么讨论导致了这一决定?”或“我们以前是否在此处记录过无效密钥的日志?”或“我们是否有过处理Zstd压缩的代码?”
Git的搜索对于这类查询来说很困难。git log --grep="auth"
假设你记得提交消息中的确切词语。想要找到“我们在API端点改进错误处理的提交”?你需要使用多个grep和复杂的正则表达式,但仍然会错过使用不同术语的提交。我们需要更好的工具。
介绍Spelungit
我构建了Spelungit,一个用于Git提交历史的语义搜索引擎。你可以通过Claude Code的MCP接口使用自然语言进行搜索,而不是依赖关键词轮盘赌。
想要查找重构身份验证的提交?询问“身份验证流程重构”。寻找后台处理中的竞争条件?搜索“作业处理中的竞争条件”。它能理解意图,而不是让你猜测三个月前的确切词语。
工作原理
代替这种方式:
|
|
在你选择的AI开发工具中这样做:
|
|
有效的查询:
- “我们何时从REST切换到GraphQL?”
- “我们在API端点改进错误处理的提交”
- “显示身份验证流程的重构”
- “文件上传处理中的安全改进”
- “我们在哪里修复了工作进程中的内存泄漏?”
它为提交消息和代码变更创建嵌入,这使得语义搜索成为可能。它能区分新功能和错误修复,即使提交消息含糊不清(看看你,过去的我)。
安装
Spelungit使用SQLite和本地嵌入使安装简单。一切都在你的机器上运行。不需要API密钥、数据库或Docker。
一行命令:
|
|
下载所有内容,设置Python虚拟环境,安装依赖项,配置Claude Code。对管道到bash有疑虑?克隆仓库并运行./install.sh
。
使用它
在Claude Code(或你选择的AI工具)中显示为MCP服务器。第一次在spelungit响应的仓库中提问时,spelungit将索引该仓库。完成后,它将能够回答问题。对于大型仓库,分析提交和创建嵌入可能需要几分钟。
然后自然搜索:
- “显示关于错误处理改进的提交”
- “查找我们重构身份验证的地方”
- “最近API层发生了什么变化?”
Claude在后台调用适当的MCP工具(index_repository
、search_commits
、repository_status
、get_database_info
)。
底层原理
分析提交消息和代码变更。对于每个提交:
- 来自消息和差异的语义内容
- 代码模式如函数名和类
- 文件类型和目录结构
- 功能 vs. 错误修复 vs. 重构
使用Microsoft的all-MiniLM-L6-v2(384维)和本地sentence-transformers创建嵌入。嵌入存储在SQLite中。搜索Git历史使用余弦相似性搜索。
sqlite数据库仅存储提交SHA和嵌入,将完整提交消息保留在git中。数千个提交=几兆字节。如果你喜欢自虐,还支持Git工作树。
为什么构建这个工具
我在多个仓库中工作,经常需要理解变更的原因。传统的Git工具有限。需要太多侦探工作来滚动查看提交。
我希望能用简单的英语询问Git历史问题并得到正确的提交返回。Git历史的语义搜索是我一直希望GitHub添加的功能。我等不及了,所以构建了这个。
此外,我一直在试验MCP服务器,并希望构建一些有用的东西,而不是另一个待办应用。
未来的改进想法
- 可配置模型:本地嵌入工作得很好,但OpenAI的模型对于愿意为了更好的准确性而牺牲隐私的团队来说会更好。
- PostgreSQL支持:用于大型仓库或共享团队搜索。
- 更智能的代码理解:更好的重构 vs. 功能检测,随时间变化的架构变更。
试试看
Spelungit采用MIT许可证。这个项目解决了我的实际痛点。如果它不能完美工作,GitHub问题就是为此而设的。
在https://github.com/haacked/spelungit 找到它。