Spelungit:语义搜索Git提交历史的智能工具

Spelungit是一个基于语义搜索的Git提交历史查询工具,通过自然语言理解提交意图,解决了传统git log关键词搜索的局限性,支持本地嵌入和SQLite存储,无需API密钥或Docker即可快速安装使用。

Spelungit:当git log --grep不够用时

支持大型代码库具有挑战性。有时,你遇到的问题无法通过现有代码得到解答。例如,“我们何时从类组件切换到钩子,是什么讨论导致了这一决定?”或“我们以前是否在此处记录过无效密钥的日志?”或“我们是否有过处理Zstd压缩的代码?”

Git的搜索对于这类查询来说很困难。git log --grep="auth"假设你记得提交消息中的确切词语。想要找到“我们在API端点改进错误处理的提交”?你需要使用多个grep和复杂的正则表达式,但仍然会错过使用不同术语的提交。我们需要更好的工具。

介绍Spelungit

我构建了Spelungit,一个用于Git提交历史的语义搜索引擎。你可以通过Claude Code的MCP接口使用自然语言进行搜索,而不是依赖关键词轮盘赌。

想要查找重构身份验证的提交?询问“身份验证流程重构”。寻找后台处理中的竞争条件?搜索“作业处理中的竞争条件”。它能理解意图,而不是让你猜测三个月前的确切词语。

工作原理

代替这种方式:

1
2
3
# 你甚至如何grep“竞争条件修复”?
git log --grep="race\|concurrent\|thread\|lock\|mutex" --all
# 现在手动阅读50个提交...

在你选择的AI开发工具中这样做:

1
搜索git历史记录中的“后台作业中的竞争条件修复”

有效的查询:

  • “我们何时从REST切换到GraphQL?”
  • “我们在API端点改进错误处理的提交”
  • “显示身份验证流程的重构”
  • “文件上传处理中的安全改进”
  • “我们在哪里修复了工作进程中的内存泄漏?”

它为提交消息和代码变更创建嵌入,这使得语义搜索成为可能。它能区分新功能和错误修复,即使提交消息含糊不清(看看你,过去的我)。

安装

Spelungit使用SQLite和本地嵌入使安装简单。一切都在你的机器上运行。不需要API密钥、数据库或Docker。

一行命令:

1
curl -sSL https://raw.githubusercontent.com/haacked/spelungit/main/install-remote.sh | bash

下载所有内容,设置Python虚拟环境,安装依赖项,配置Claude Code。对管道到bash有疑虑?克隆仓库并运行./install.sh

使用它

在Claude Code(或你选择的AI工具)中显示为MCP服务器。第一次在spelungit响应的仓库中提问时,spelungit将索引该仓库。完成后,它将能够回答问题。对于大型仓库,分析提交和创建嵌入可能需要几分钟。

然后自然搜索:

  • “显示关于错误处理改进的提交”
  • “查找我们重构身份验证的地方”
  • “最近API层发生了什么变化?”

Claude在后台调用适当的MCP工具(index_repositorysearch_commitsrepository_statusget_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 找到它。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计