即時分享程式碼、筆記和片段。

Git 越來越成為一個摩擦點。大型語言模型(LLM)在程式碼編輯方面具有高吞吐量。整理這些變更需要不成比例的時間,並且經常會重複你之前的工作,如果你在會話期間確實閱讀了 diff,我強烈建議這樣做。即使是單人開發現在也變成了協作:至少,你的協作者是一個 LLM。在平靜的水域中,運行幾個代理程式沒什麼特別的。然後我擁有一整個團隊,還有所有的合併和 rebase(我們喜歡不計任何代價地進行)。

這就是為什麼我認為現在是尋找 Git 的替代品的時候了,這也是我正在開發一個的原因。儘管現有 Git 儲存庫的龐大質量具有巨大的吸引力,但我堅決拒絕「與 Git 相容」的方法。jj 對於 Git 就像 Subversion 對於 CVS 一樣。我們需要的是 Git 對於 CVS 那樣的「等級提升」。所有長期存在和所有新問題都根源於 Git 的核心架構。在其他情況下,這些問題早就透過漸進式改進得到修復了。

Monorepo 問題:Git 在將程式碼庫劃分為模組和重新組合它們方面存在困難。除了 Git submodule 的笨拙即興創作一直困擾著我們之外,分割和組合程式碼的非常概念性的方法也缺乏。所有大型 monorepo 公司都要么使用其他東西,要么建立在 Git 之上。

分割/組合問題有更多的影響。例如,假設我想將我的提示和計畫保存在單獨的儲存庫中,但在需要時將它們組合起來。或者,完全採用 JTPP -「請只給我提示」。原則上,Git 對於這種「覆蓋分支」沒有解決方案。Git 中有一個原始碼樹,有一個建置樹在別處,還有一個提示/待辦事項/計畫樹在另一個不同的地方。

合併/rebase 問題:合併提交會產生相當大的摩擦,而 rebase 會丟棄上下文並暗示層級。從根本上說,Git 的合併是一種意志行為,它們不是確定性的。因此,合併必須以所有儀式記錄下來。最重要的是,Git 不具備語法感知能力,因此錯誤的衝突相當普遍。手動解決瑣碎衝突是摩擦的另一個方面。

缺乏任何比 grep 更好的程式碼洞察功能。如果 SCM 是程式碼的資料庫,就必須有一個完善的查詢語言。我想查看自 D 日期以來特定函數的變更,或者在此期間它有哪些新用途。就像 Git 遇見 IDEA。IDE/LSP 為我們提供了程式碼的空間結構,SCM 增加了時間維度。這在調查代理程式實際做了什麼時尤其有價值。

資料累積問題:一旦你將東西提交到儲存庫,它們就會永遠綁定在 Merkle 圖中。有方法可以只接收最新版本,但缺乏任何通用的按使用量付費模式。Git 的資料完整性模型類似於區塊鏈:全有或全無。(事實上,很多歷史記錄會被 rebase 修剪掉,因為否則事情將無法管理。這也是一個問題,因為編輯的實際血統被完全丟棄了。)

資料模型問題:Git 內部處理 blob,這相當粗糙。事實上,我們已經深入了解了:Git 是一個內容可尋址檔案系統,而不是一個內容可尋址資料庫。

總體而言,我們需要一個程式碼的資料庫!

再次強調,我在過去 10 年的各種會議上都提到了這些觀點,CRDT 社群中的許多其他人也討論了 10-15 年的「覆蓋分支」和「CRDT 修訂控制」。本質上,所有這些都歸結為兩件事:

其中一種方法是將文字表示為 CRDT 字元向量,這在該領域非常受歡迎。Zed 的 DeltaDB 與該方法一致。我過去也製作過這樣的系統。可以安全地假設這是預設選項。另一方面,如果我們查看任何 JetBrains IDE 或 LLVM 內部的細節,我們將看到 AST 樹。因為程式碼有結構。如果你想以相同的方式處理所有原始碼,你會使用基於行的文字(就像所有 UNIX 工具一樣)。如果你想做花哨的事情,你會解析原始碼並使用 AST。

Git 是一個檔案系統,所以它將所有內容視為 blob(git diff 接收輸入 blob 並演算法地重建最可能的編輯)。

我認為這是一個機會:一個處理類似 AST 的樹的修訂控制系統,具有非常正式、確定性且可逆的分割/組合/分叉/合併語義以及一個結構感知查詢語言。作為基礎,我使用了 Replicated Data eXchange 格式(RDX),這是一個具有非常好的 CRDT 合併語義的 JSON 超集。

第三部分。CRDT 修訂控制的內部工作原理。

你是否評估過 Pijul?它目前缺乏一個相當於我意識到的 submodule,但它解決了 rebase 問題。

載入時發生錯誤。請重新載入此頁面。

Radicle 在 Git 中使用 CRDT 來處理社交工件(例如問題和補丁),請參閱 https://radicle.xyz/guides/protocol#collaborative-objects 和實作 https://github.com/radicle-dev/heartwood/tree/master/crates/radicle-cob。該系統是可擴展的。加入討論 https://radicle.zulipchat.com/。

載入時發生錯誤。請重新載入此頁面。

你認為像 https://www.unison-lang.org/docs/the-big-idea/ 這樣的處理方法如何?它與你的願景相比如何?

載入時發生錯誤。請重新載入此頁面。

你認為像 https://www.unison-lang.org/docs/the-big-idea/ 這樣的處理方法如何?它與你的願景相比如何?

我認為,該專案的長遠目標是將老舊的無聊程式碼「unison-化」。

載入時發生錯誤。請重新載入此頁面。

載入時發生錯誤。請重新載入此頁面。