去年我接手过一个”祖传”项目。说是祖传,其实也没多老,就是一个三年前写的内部服务,原开发者已经离职,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 和隐私、你愿不愿意装东西,答案自己就浮出来了。



