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 雙重許可證。