Anthropic 自造 Scion:当 AI 把版本控制逼回「服务器时代」
版本控制可能是今年最魔幻的受害者:Anthropic 发了一篇工程博客,说他们用了五个月,把整个 monorepo 从 git 迁到了一套自研的版本控制系统 Scion。起因不复杂——5 月他们每天合并 2500 次,到了 9 月,每天 3 万次。

版本控制可能是今年最魔幻的受害者:Anthropic 发了一篇工程博客,说他们用了五个月,把整个 monorepo 从 git 迁到了一套自研的版本控制系统 Scion。起因不复杂——5 月他们每天合并 2500 次,到了 9 月,每天 3 万次。HN 上 500 多个赞、500 多条评论,热评第一句就是那句经典:「所以……Anthropic 重新发明了 SVN?」今天请来老朋友陈墨——分布式系统工程师,以前在大厂做过构建和版本控制基础设施,让他带我们拆一拆:当写代码的主要不再是人,git 到底哪里不够用了。
本文由每日自动管线生成:选题与素材来自 Hacker News 公开讨论,访谈内容由 AI 基于原文整理,嘉宾为角色设定,观点不代表任何真实人物。
小听: 陈墨,先给个直觉。Anthropic 每天 3 万次合并、2500 万次检出,这是什么量级?普通团队压根想象不到吧。
陈墨: 普通团队确实想象不到。一个健康的开发团队一天几十次提交就热闹了。Anthropic 的数字背后是 agent:代码不是人写的了,Claude 可以昼夜不停地迭代、优化、重构,合并请求的潜在供给几乎无限。他们的原话很有意思——瓶颈不再是写代码,而是为「人类规模」设计的开发者基础设施。git、构建、CI 全算上。他们是第一个撞上这堵墙的人。
小听: 那这堵墙到底在哪?git 不是有 shallow clone、sparse checkout、promisor remote 吗,大厂不都靠这些伺候 monorepo 吗?
陈墨: 他们全都用了。Anthropic 高峰期跑过几百个内部 git 镜像对付流量,还给 blob 存储里放快照。但合并速率一上去,这些补丁就绷不住了:快照离 main 越来越远,依赖历史的 diff 和 blame 在部分克隆上越来越难做。核心矛盾是 git 的底层假设——每个客户端都是完整的离线仓库,能算 diff、能读 blame、能 checkout 任意版本。而 Anthropic 的客户端几乎全是 agent 和 job,它们本来就在线。给在线客户端保留一整套离线能力,等于每份能力都在缴税。
小听: 所以 Scion 的第一个设计原则是「客户端永远在线」?这确实是对 git 世界观的釜底抽薪。
陈墨: 对。他们问了个很好的问题:如果从头设计时就把「agent 永远在线」当作事实,版本控制会长什么样?Scion 的答案是彻底的 client-server 不对称:服务器回答历史、做 blame、建 changeset、做 merge 和 rebase,客户端只维护一个有上限的本地对象缓存、把文件铺到磁盘、监控文件变化。你会发现客户端几乎什么都算不了,作为交换,它本地需要的数据少得惊人。
小听: 这就解释了 HN 那条「重新发明 SVN」的评论。不过我看作者们的回应—— SVN 是为人类设计的集中式,Scion 是为 agent 设计的集中式。听着像抬杠,实际差在哪?
陈墨: 差在「谁在线、谁算得多」。SVN 的客户端是笨的人类客户端,逻辑还是 checkout-edit-commit 一套人机交互。Scion 的客户端本质是可编程的:CI job 想知道「某个提交和它的 merge base 之间有什么 diff」,直接问服务器 API,不用检出任何东西。写操作也是,很多写入工作负载完全走 API,不检出。几千万次检出里,大量其实根本不需要 working copy。把「要不要检出」从必选项变成可选项,这是 SVN 时代想都不敢想的。

离线的尊严,在线不一定买得起。
小听: 说到数据结构,Scion 的基本单位不叫 commit,叫 changeset,还存在 write-ahead log 里。这个选择妙在哪?
陈墨: git 的 commit 存的是指向整棵 tree 的指针,读历史很快,但写进去要打包、要上锁、要动 ref。Scion 的 changeset 只存「相对第一个父提交改了哪些文件」,加上指向 blob 存储里压缩内容的 content-addressed 指针。所有变更都在服务器端创建、瞬间全局可见,没有 packfile、没有锁、没有跨服务器协调,连 ref 都被刻意淡化——除了 main 和发布分支,分支和 tag 这种全局状态被视为潜在的扩展性炸弹。代价就是:changeset 自己回答不了「哪一行最后被谁改过」。所以他们做了第二层——派生数据。
小听: 派生数据(derived data)这部分我觉得是整篇最漂亮的。blame、path history、commit graph 的 skip list,全走一套通用的递归机制,按需计算、延迟物化。
陈墨: 对,而且可扩展性是副产品。想加一种新的派生数据(比如拷贝检测索引),直接定义「它从父提交的值怎么算出来」,加进机制就行;每种还能独立选择即时算还是懒算;客户端永远看不到内部结构,服务端随便优化。这其实是基础设施设计的经典套路——把「存储事实」和「回答问题」解耦。git 把两件事绑死在同一个对象模型里,灵活度就没了。
小听: 数字也值得念一下:基础设施的 CPU 和内存占用降到原来的 1/200,CI 和研究任务的检出从分钟级降到秒级,CI 单独省出 25% 的 CPU 容量。三层缓存架构(daemon、cache、server)每层命中率都超 99%。
陈墨: 注意这个 200 倍:是从「几百个 git 镜像」那个臃肿状态比的。但检出从分钟到秒是真的质变——每天 2500 万次检出,每次省几分钟,省下来的是全 fleet 的容量。而且他们一开始迁移时甚至没有客户端:Scion 先只回答「元数据」问题(祖先、blame),取文件内容和铺 working copy 是后来才做的另一套设计。先让工具链不依赖本地仓库,再重做检出,这个迁移顺序很老道。
小听: 转到 HN 评论区最有意思的两条。一条说:能不能直接把 prompt 当「源码」提交,AI 生成的代码当成昂贵的构建产物?另一条更损:有人抱怨自家 agent 在他的仓库里用 git 时做出各种「人类老 git 用户看了觉得神经病」的操作,疑似是被 Anthropic 内部把 git 当消息队列用的工作流污染了训练数据。
陈墨: 两条都命中了同一个命题:代码和意图正在分离。prompt-as-source 那个想法其实是 Scion 逻辑的终极版——如果代码是可再生的构建产物,那真正值得版本控制的是意图和约束。至于第二条,Anthropic 自己也承认:他们历史上确实把 git history 当过 agent 之间的消息队列和事实来源。这属于「工具不够用,人就歪用」,而 Scion 的服务器端 API 恰恰是想给 agent 一个正经的问答接口,不用再歪用 git。
小听: 还有一条高赞评论说:在内部有最强模型这件事的优势被低估了,拿着次一等模型的公司会被甩开。原文里也有呼应——Claude Mythos Preview 重写他们的 git-to-Scion 导入管线,内存降到 1/20,速度快 4 倍,还保住了所有隐式不变量。
陈墨: 这就是「用魔法打败魔法」的闭环:Claude 写代码制造了扩展性危机,危机倒逼出 Scion,而 Scion 又是 Claude 自己写的。7 个人、5 个月,连 code review 工具 Antique 一起造出来,还顺手迁完了。过去这种量级的系统迁移要几年、要几十人。以后小团队快迁移会越来越常见,但前提是你手里得有那个级别的模型。
小听: 工程师的角色变化这段我印象最深:「工程师最有价值的工作变成了对 Claude 说不。」agent 会为了满足某个模式去违反核心系统约束,对抗性评审(adversarial review)又常常近视,工程师得把 Claude 从过度工程里拽回来。现在他们评审的是变更的意图,而不是逐行读代码。
陈墨: 这是全篇最诚实的一段。还有个细节:他们给每个组件都配了一个「superfan」Claude——有个 Slack 频道,里面住着个对 scion-daemon 健康状况偏执狂的 Claude,天天刷 telemetry 和日志找异常。传统告警还在,但 superfan 能抓到告警看起来一维的新型问题。运维这事,正在从「人看仪表盘」变成「agent 替你偏执」。

最难写的代码,是让 AI 停下来的那一行。
小听: 但他们也很坦白:Scion 不适合一般人用,几万工程师或 agent 大军的巨型 monorepo 才用得上,而且他们烧 token 的能力别的公司学不来。那普通开发者能搬走什么?
陈墨: 他们自己给了答案,而且很实在:git 服务器不必和 git 客户端一个工作方式。新型服务器架构能带来巨大的扩展性提升;平台可以提供 Scion 式的服务端 RPC,甚至跨 forge 标准化,让 git 客户端学会去「问」而不是去「拉」;协商协议、sparse/shallow 的组合方式都可以重做。对我们普通人来说,真正的 takeaway 是:当 agent 成为主要的代码生产者,所有为「人类规模」设计的东西——版本控制只是第一个——都会被重新问一遍「如果客户端永远在线,会长什么样」。CI、构建、代码评审,一个都跑不掉。
小听: 最后一句总结?
陈墨: git 赢在「离线也能工作」;Scion 赌的是「agent 永远在线」。工具的世界观,永远跟着写代码的人走——现在写代码的人,正在换成不是人的东西。