Repomix 对比 code2prompt 和 Gitingest:把代码仓库喂给 AI 哪个更好用

Repomix 对比 code2prompt 和 Gitingest:把代码仓库喂给 AI 哪个更好用

去年我接手过一个”祖传”项目。说是祖传,其实也没多老,就是一个三年前写的内部服务,原开发者已经离职,README 里只留下一句”启动方式见文档”,而那个文档链接早就 404 了。剩下的是四百多个文件、几万行代码,还有一堆我从来没听过的依赖。

我做的第一件事,是想办法让 AI 帮我读代码。我把几个看起来核心的文件复制粘贴进 ChatGPT,它确实能解释,但每次只能看一小块。我问它”这个函数调用的那个类定义在哪”,它答不上来,因为它压根没看到那个文件。

这种挤牙膏式的问答来来回回耗了我大半天,比我自己翻代码还累。

后来我才知道,有一类工具专门干这件事:把整个代码仓库打包成一个文件,让 AI 一口气看完。这类工具里现在有三个比较火的,Repomix、code2prompt、Gitingest。它们干的活看起来一样,选起来却大有讲究。

为什么”看起来一样,其实不一样”

先把场景说清楚。想把一个仓库喂给大模型,常见的有四种做法。

最原始的是手动复制粘贴。打开几个文件,把内容贴进对话框。这种做法的前提是你已经精确知道哪两三个文件有用,一旦模型需要的上下文是某个你没贴进去的文件,它就歇菜了。

第二个是 RAG,也就是把代码切块存进向量库,每次按问题检索相关片段。它能处理超大仓库,但检索质量成了新瓶颈:跨文件的逻辑链条经常因为某个关键块没被检索到而断掉,而且你还得维护一整套索引管道。

第三个是 agentic 工具,Cursor、Claude Code、Copilot 这类,让模型自己在仓库里探索。这是重武器,适合日常开发,但轻量场景下有点大材小用。

第四个就是单文件打包。把目录树放在最前面,然后每个文件的内容挂在路径标题下面,整个塞进一个 prompt。模型一眼看到全貌:结构、导入、配置、实现,全都在。这条路对大多数中小型项目来说最划算,因为几万行代码打包后通常在 5 万到 15 万 token 这个区间,正好落在主流模型的上下文窗口里。

Repomix、code2prompt、Gitingest 走的就是第四条路,但各有各的走法。

Repomix:省 token 这件事上想得最细

Repomix 是三者里最出圈的,前身叫 Repopack,GitHub 上大约有 2.8 万颗 star。它用 TypeScript 写的,装起来一行命令:

“`

npm install -g repomix

“`

装完进项目目录敲一下 repomix,它就生成一个 repomix-output.xml,把整个仓库装进去。

我第一次用时有点意外,它默认输出的不是纯文本,而是 XML。当时我以为是把简单的事搞复杂了,后来才明白,XML 的结构化标签对模型区分”这是文件名””这是文件内容”这类边界特别友好,Claude 对这种格式的优化也比较到位。不过它同样支持换成 Markdown、JSON 或纯文本,加个 --style 参数就行。

Repomix 真正让人记住的,是它在省 token 这件事上塞的一堆细节。它有个 --compress 选项,用 Tree-sitter 把代码结构做压缩,去掉空行和冗余部分,同一个仓库能省下不少 token。它还给每个文件、整个仓库分别统计 token 数,你在粘贴之前就知道大概要占多少上下文,心里有底。

还有一个细节我很喜欢:它内置了 Secretlint,打包的时候会顺手扫一遍有没有硬编码的密钥。这对”把代码交给外部 AI 服务”这件事来说挺关键,你肯定不想把生产环境的 key 一起贴给 ChatGPT。

它的能力还在往外长。--remote 可以直接打包远程 GitHub 仓库,支持分支和 commit 地址;--mcp 能让它变成一个 MCP server,供 Claude、Cursor 这些工具按需调用;后来又出了浏览器扩展、Docker 版和网页版 repomix.com,入口越来越多。

code2prompt:模板自由度和速度是它的牌

code2prompt 是另一路选手,用 Rust 写的。它的卖点首先是快。Rust 单二进制,没有 Node 那层运行时,打包速度确实比 Repomix 快一截。不过它真正区别于 Repomix 的地方,是那套 Handlebars 模板系统。

Repomix 的输出格式基本是固定的,XML 或 Markdown 那几个。code2prompt 则可以自己定义 prompt 长什么样:你可以做一个”代码审查”模板,让它输出”目标 + 格式 + 上下文”的结构,也可以做一个”重构”模板。对喜欢折腾 prompt 的人来说,这个自由度很实用。

它还有个交互式 TUI,在终端里勾选要包含哪些文件,比记命令行参数直观。另外它提供了 Python 绑定和一个 MCP server,方便把它嵌进 RAG 管道,或者让 agent 按需拉取上下文。这一点对写脚本做自动化的人来说是加分项。

code2prompt 的短板也摆在明面上。社区规模比 Repomix 小很多,star 数大约 7.4k,差了快一个量级。发版节奏也在放缓,最近一个 tagged release 还是 2025 年 12 月的 v4.2.0,虽然仓库本身 2026 年还在更新。它没有 Tree-sitter 压缩,省 token 的能力不如 Repomix。

Gitingest:把”hub”换成”ingest”,零门槛

Gitingest 走的是完全不同的路线。前两个都得装命令行工具,Gitingest 主打的是零门槛。

它最有代表性的用法是:把任意 GitHub 网址里的 hub 换成 ingest。比如你想看 FastAPI 的仓库,就把 github.com/fastapi/fastapi 改成 gitingest.com/fastapi/fastapi,网页直接给你生成一份可以粘给 LLM 的文本摘要,目录树加文件内容,一目了然。

这对不想装任何东西的人太友好了。你甚至可以在浏览器里直接把某个开源库消化成一坨文本,扔给 ChatGPT 问问题,全程不用碰终端。

它也有 CLI,底层是 Python。因为整个项目是从 Python 生态里长出来的,它对 Python 项目和数据科学工作流更顺手。它还支持私有仓库,用的是 personal access token,而且 token 不落盘、用完即弃、处理完就删克隆,隐私这块想得比较周到。

Gitingest 的局限在于,它默认单个文件有 50kB 的上限,超大的文件会被截断。它的 star 数在 1.4 万左右,介于另外两者之间。它也是三者里深度定制能力最弱的,想精细控制包含和排除规则、换输出格式,选择比另外两个少。

一张表看清差异

这三款工具各有侧重,光靠文字不容易比,我整理了一张表。看表之前先说明一句:这里列的”省 token 手段”和”密钥检测”是它们差异最大的地方,也是大多数人选错工具的根源。

维度 Repomix code2prompt Gitingest
技术栈 TypeScript / Node Rust Python
安装门槛 npm 一行命令 下载单二进制 网页直接用,也可装 CLI
默认输出 XML,可换 MD/JSON/纯文本 自定义模板 纯文本
省 token 手段 Tree-sitter 压缩 单文件 50kB 上限
密钥检测 内置 Secretlint
token 计数
MCP server
特色 浏览器扩展 / Docker / 远程打包 Handlebars 模板 / TUI / Python 绑定 hub 换 ingest 零门槛

表格本身已经能说明很多问题。Repomix 在”省 token + 安全 + 生态”这条线上最完整,code2prompt 在”速度 + 定制”上有自己的位置,Gitingest 赢在门槛。

到底怎么选

选哪款,取决于你站在哪个位置。

如果你要一次看全、越省 token 越好、还担心密钥泄露,Repomix 最稳。它社区最大,出问题容易找到答案,坑最少。这也是它 star 数拉开差距的原因。

如果你在意速度,喜欢自定义 prompt 格式,或者想把它嵌进自己的 Python 流程里,code2prompt 更顺手。它的模板系统是另外两个给不了的。

如果你只想偶尔把一个开源库塞给 AI 问两个问题、不想装任何东西,Gitingest 的网页版是最快的路径。打开网页、换两个字母、粘文本,三步完事。

还有一类场景要单独拎出来讲:超大仓库。几十万行代码、monorepo、企业级项目,这时候不管用哪款,全量打包都会撑爆上下文窗口。正确的做法是打包一个子树,用 --include--ignore 圈定范围,或者干脆上 agentic 工具让模型自己按需探索。这三款工具的甜蜜区,恰恰是”中小型仓库”这个区间,超过这个区间它们就力不从心了。

回到我那个祖传项目。最后我是用 Repomix 把整个仓库打成一个 XML,塞进 Claude,让它先给我画了一张模块依赖图,再逐个解释核心流程。那个下午省下来的时间,比装工具折腾的几分钟多得多。

工具本身没有高下,只有合不合适。搞清楚你的仓库多大、你有多在意 token 和隐私、你愿不愿意装东西,答案自己就浮出来了。

延伸阅读

查看完整选型指南 →

Stay updated with our latest AI insights

Follow FuturePicker on Google
滚动至顶部