Facebook 推出全新源代碼管理系統 Sapling

Facebook(在俄羅斯聯邦被禁止)發布了 Sapling 原始碼控制系統,用於公司內部專案的開發。 該系統旨在提供一個熟悉的版本控制介面,可以擴展到跨越數千萬個文件、提交和分支的非常大的儲存庫。 客戶端程式碼是用 Python 和 Rust 編寫的,並在 GPLv2 許可證下開放。

單獨開發了伺服器部分,以實現與儲存庫的高效遠端工作,以及虛擬檔案系統,用於將儲存庫的一部分的本機切片作為完整的儲存庫(開發人員可以看到整個儲存庫,但只能看到存取所需的資料)被複製到本機系統)。 Facebook 基礎設施中使用的這些元件的程式碼尚未開放,但該公司已承諾將來會發布。 然而,目前在 Sapling 儲存庫中,您已經可以找到 Mononoke 伺服器(Rust 中)和 VFS EdenFS(C++ 中)的原型。 這些元件是可選的,Sapling 用戶端足以工作,它支援克隆 Git 儲存庫、與基於 Git LFS 的伺服器互動以及與 GitHub 等 git 託管網站一起工作。

該系統的主要思想是,當與提供儲存庫儲存的特殊伺服器部分互動時,所有操作都會根據開發人員正在處理的程式碼中實際使用的檔案數量進行縮放,而不依賴整個儲存庫的總大小。 例如,開發人員可能只會使用非常大的儲存庫中的一小部分程式碼,並且只有該小部分程式碼將遷移到他的系統,而不是整個儲存庫。 當存取儲存庫中的檔案時,工作目錄會動態填充,一方面,這可以讓您顯著加快程式碼部分的工作速度,但另一方面,會導致存取新檔案時速度減慢。第一次並且需要持續存取網路(單獨提供和離線模式用於準備提交)。

除了自適應資料載入之外,Sapling 還實現了旨在減少歷史變更資訊載入的最佳化(例如,Linux 核心的儲存庫中 3/4 的資料是歷史變更)。 為了有效地處理更改歷史記錄,與其關聯的資料儲存在分段表示中,讓您可以從伺服器下載提交圖的各個部分。 客戶端可以從伺服器請求有關多個提交之間關係的信息,並僅下載圖表的必要部分。

該專案已經發展了過去 10 年,旨在解決透過一個主分支組織對非常大的整體儲存庫的存取時出現的問題,該分支使用「rebase」操作而不是「merge」。 當時,還沒有使用此類儲存庫的開放解決方案,Facebook 工程師決定創建一個新的版本控制系統來滿足公司的需求,而不是將專案拆分為小型儲存庫,這會導致專案的複雜性。依賴管理(曾經,為了解決類似的問題,微軟創建了GVFS層)。 最初,Facebook 使用 Mercurial 系統,第一階段的 Sapling 專案是作為 Mercurial 的補充而開發的。 隨著時間的推移,該系統轉變為一個獨立的項目,擁有自己的協定、儲存格式和演算法,並且還透過與 Git 儲存庫互動的能力進行了擴展。

對於工作,提供了一個命令列實用程式“sl”,它實現了熟悉 Git 和 Mercurial 的開發人員所熟悉的典型概念、工​​作流程和介面。 Sapling 中的術語和命令與 Git 略有不同,但更接近 Mercurial。 例如,使用「書籤」取代分支(不支援命名分支),預設情況下,執行複製/拉取時,不會載入整個儲存庫,而僅載入主分支,沒有提交的初步標記(暫存區),而不是“git fetch”,使用“sl”命令pull”,而不是“git pull” - “sl pull -rebase”,而不是“git checkout COMMIT” - “sl goto COMMIT”,而不是“git reflog” - “sl Journal”,取消更改而不是“git checkout - FILE” 指定“sl revert FILE”,“.”用於識別“HEAD”分支。 但總的來說,分支和克隆/拉/推/提交/變基操作的一般概念被保留。

在 Sapling 工具包的附加功能中,對「smartlog」的支援脫穎而出,它允許您直觀地評估儲存庫的狀態,突出顯示最重要的資訊並過濾掉不重要的細節。 例如,當您執行不含參數的 sl 公用程式時,螢幕上僅顯示您自己的本機變更(其他變更最小化),顯示外部分支的狀態、變更的檔案和新版本的提交。 此外,還提供了互動式 Web 介面,可以快速瀏覽智慧日誌、更改樹和提交。

Facebook 推出全新源代碼管理系統 Sapling

Sapling 的另一個顯著改進是它可以更輕鬆地修復和解決錯誤並恢復到以前的狀態。 例如,提供命令“sl undo”、“sl redo”、“sl uncommit”和“sl unamend”來回滾許多操作;命令“sl hide”和“sl unhide”用於暫時隱藏提交;等等。以及通過舊狀態進行互動式導航並使用命令“sl undo -i command”返回指定點。 Sapling 還支援提交堆疊的概念,它允許您透過將複雜的功能分解為一組更小、更容易理解的增量變更(從基本框架到完成的功能)來組織逐步審查。

已為 Sapling 準備了一些附加內容,包括用於審查更改的 ReviewStack 介面(GPLv2 下的程式碼),它允許您處理 GitHub 上的拉取請求並使用更改的堆疊視圖。 此外,還發布了與 VSCode 和 TextMate 編輯器整合的附加功能,以及 ISL(互動式 SmartLog)介面和伺服器的實作。

來源: opennet.ru

添加評論