Anthropic 以自研 Scion 取代 git 管理 monorepo
Anthropic Engineering · 2026-10-13
Anthropic 把 monorepo 從 git 搬到自研的版本控制系統 Scion,commit、rebase、merge 全部改在伺服器端完成,用戶端不再持有完整副本。團隊七人約五個月完成遷移,同時配套重寫了 code review 工具 Antique。
這篇是 Anthropic 於 2026-10-13 發布的工程文章,文中也明說 Scion 並非 git 的通用替代品。
原本的問題
文章給的量級是:2026 年 5 月每天約合併 2,500 個 change,到 9 月已超過 30,000 個。main 分支歷史接近 100 GB,壓縮後的 working copy 超過 25 GB,CI 每天約 25 million 次 checkout。作者估計若照 git 原生方式抓取,每天流量會超過 600 PB。
他們先用過 shallow clone、sparse checkout、promisor remote、以 blob 儲存的 seed,尖峰時還有數百個內部 git mirror。這些手段隨合併速度上升越來越難維運,seed 也離 main 的最新狀態越來越遠。
根本矛盾在設計假設:git 是去中心化的,為離線、持有完整副本的用戶端而生。Anthropic 的用戶端幾乎都是永遠在線的 agent 與 job,這個假設反而成了負擔。
採用的方法
Scion 的設計原則包括:
- 用戶端永遠在線,需要時才抓資料,只保留有上限的本地 object cache。
- 歷史、blame、commit、merge、rebase 都由伺服器處理,沒有東西要 push。
- 全 repo 在任何地方(含伺服器)都沒有完整物化的副本,也沒有 packfile,因此不需要 repo 維護。
- working copy 是選用的、稀疏的;CI 可以只用 API 取 diff 或寫入,不必 checkout。
資料模型上,工作單位是 changeset,是 write-ahead log 的一筆紀錄,由伺服器建立。它不像 git commit 指向一棵 tree,而是列出相對於第一個 parent 的變動檔案,並以 content-addressed 指標指向壓縮 blob。refs 只建議用於 main 與 release branch,移動 ref 是對單一 Spanner row 的 compare-and-swap。
blame、path history、commit-graph skip list 等由 changeset 透過同一套遞迴的 derived data 機制算出,新增類型不需要改用戶端。
傳輸與快取架構
| git | Scion | |
|---|---|---|
| 用戶端流程 | 告知伺服器已有的 object,取回 packfile | 從 root tree 遞迴要缺少的 tree,再要缺少的 blob |
| 請求對象 | 動態組出的 pack | 不可變 object,任何 cache 都能回答 |
| 大型傳輸 | 單一大型回應 | 無單一多 GB 回應,可續傳 |
拓撲分三層:每個節點一個 scion-daemon,向區域性的 scion-cache 取資料,cache 再向 scion-server 取未命中的內容,後者讀 Spanner 或雲端儲存。三層使用相同 RPC,但層級被嚴格執行以隔離故障。
權限與審查也跟著搬到伺服器:Scion 支援 repo 層級與目錄層級的存取控制,Antique 可以表達語意化的核准規則,例如把只改註解的變更與動到敏感邏輯的變更分開處理。團隊另外建了 hermetic simulation、fuzzing 與 rate limiting,並稱 Scion 是公司內測試最完整的程式庫之一。
實際效果
- CPU 與記憶體用量約為先前 git mirror 架構的 1/200。
- CI 與研究 job 的 checkout 從分鐘級降到秒級;CI 單項就多出 25% 的 CPU 容量。
- 每一層 cache 命中率都高於 99%。
- 用 Claude Mythos Preview 重寫 git 到 Scion 的 ingestion pipeline,記憶體少 20 倍、快 4 倍,並保留排序不變式。
影響範圍
多數團隊不該照抄。文章自己的評估是 Scion 與 git 差異很大,需要自己的 code review、code search 與 CI,只適合極大型 monorepo,且 Anthropic 的 token 花費異常高。
真正可借用的是想法:如果你的 CI 與 agent sandbox 佔了 checkout 流量大宗,可以檢查它們是否真的需要完整歷史,改用 sparse 與 virtualized checkout,或把查詢(blame、bisect、revert)改成 API 呼叫。作者也希望 server-side RPC、新的伺服器架構、可組合的 sparse 與 shallow 功能能回到 git 生態,並表示希望與 GitHub、GitLab 與開源社群合作。
流程面也變了:全域 merge queue 鎖不適合 agent 規模,團隊改投資 post-merge 與 pre-deploy 測試,接受並行變更會衝突,由 Claude 修復。文章未公布 Scion 或 Antique 是否開源。