Show HN:git-lazy-mount —— 無需克隆即可掛載倉庫,相容普通 Git
git-lazy-mount 是一個開源工具,利用 FUSE 檔案系統,允許使用者在不完整克隆的情況下掛載 Git 倉庫,檔案按需下載,特別適合微虛擬機器中的編碼代理。它還整合了 sgrep 來替代 grep,避免全量拉取。目前僅支援 Linux。
git-lazy-mount 是一個創新的開源專案,它允許使用者透過 FUSE 檔案系統懶載入掛載 Git 倉庫,而無需執行完整的克隆操作。該工具的核心優勢在於按需下載檔案:當檔案被讀取或編輯時才會實際從遠端倉庫拉取內容,從而節省頻寬和儲存空間。
此專案主要面向在微虛擬機器中執行的編碼代理場景。傳統的工作流程需要先完整克隆倉庫,這可能會導致明顯的延遲。使用 git-lazy-mount 後,代理可以立即開始工作,因為只有必要的檔案才在需要時被下載,例如在執行測試或構建時。
該工具的一個關鍵特性是它完全相容普通的 Git 命令。一旦倉庫被掛載,使用者可以直接使用 cd、vim、git commit、git push 等常規操作,而不需要學習新的工具鏈。
為了解決搜尋工具(如 rg 和 git grep)會讀取所有檔案從而破壞懶載入優勢的問題,專案整合了 sgrep。sgrep 透過查詢程式碼搜尋索引(預設使用 Sourcegraph,可擴充套件)來定位匹配項,併疊加未提交的編輯,從而避免任何網路傳輸。
效能方面,在 Linux 容器中進行的冷啟動測試表明,對於大型倉庫(如 Microsoft/TypeScript 擁有 81,370 個檔案),git-lazy-mount 僅下載 27 MB 的資料,而完整工作樹需要 652 MB。對於中等大小的倉庫(如 microsoft/vscode),完整副本需要 301 MB,而懶載入僅傳輸 94 MB。
目前,git-lazy-mount 僅支援 Linux,因為其底層棧使用了 Linux FUSE(libfuse3 和 /dev/fuse)。macOS 和 Windows 目前不受支援,但專案維護者在 docs/future-platforms/ 中保留了相關設計筆記和可行性研究,以備將來支援。
安裝方式:在 Linux 系統上,需要安裝 libfuse3 和系統 Git(>=2.36),然後使用 cargo build --release -p glm-cli --features fuse 編譯。更多文件和架構細節可在 docs/ 目錄中找到。該專案採用 MIT 和 Apache 雙重許可證。