Git 2.25.0 發布,新特性:部分 clone 與稀疏 checkout

←手機掃碼閱讀     admin @ 2020-01-15 , reply:0

Git 2.25.0 發布了,項目貢獻者 Taylor Blau 介紹了此版本帶來的一些特性上的亮點,包括部分克隆(partial clone)與稀疏檢出(sparse checkout)。

partial clone,部分克隆

一般來說,Git clone 時副本會複製倉庫的所有數據,包括歷史記錄中每個文件的每個版本,對於非常大的存儲庫,如果只需要文件的一部分,那會無形中增加網路傳輸和本地存儲的成本。在過去的幾個版本中,Git 擁有了執行部分克隆的能力,這意味著它現在可以克隆並使用存儲庫部分內容而無需擁有所有內容。

目前該特性還處於實驗階段。

具體來講,部分克隆需要客戶端做兩件事:它必須能夠告訴伺服器它只需要存儲庫中的哪些對象,同時還必須能夠不與缺少完整對象集的本地存儲庫產生衝突。另一方面,伺服器則必須能夠解釋客戶端的請求,僅服務於某些對象,並能夠生成適當的響應。

這其中必要的邏輯是需要 Git 在收到伺服器的響應后能夠跳過檢出存儲庫,因為一旦檢出,那麼它就會發現 clone 的對象不完整,並嘗試向伺服器請求。實際上這一功能由另一個新特性實現:sparse checkout,稀疏檢出。

sparse checkout,稀疏檢出

稀疏檢出實際上是一個類似於 .gitignore 的文件路徑模式匹配列表,告訴 Git 在檢出存儲庫時可以跳過哪些對象,它的工作對象是副本內容,而不像 .gitignore 是索引。

稀疏檢出有一個缺點就是很難指定,比如下邊是為了跳過檢出深度大於等於 2 的文件:


$ git clone --filter=blob:none --no-checkout /your/repository/here repo
$ cd repo
$ cat >.git/info/sparse-checkout <<EOF
/*
!/*
EOF
$ git config core.sparseCheckout 1
$ git checkout .

首先,指定 --filter = blob:none 要求伺服器避免向我們發送 blob,隨後使用 --no-checkout 告訴 Git 在檢出存儲庫時跳過 /your/repository/here 這部分,但它實際上還要依賴於 .git/info/sparse-checkout中的模式匹配。

Git 2.25 中,通過引入新的 git sparse-checkout 命令,讓這一操作更加簡便。以下是與上邊相同功能的 demo:

$ git clone --filter=blob:none --sparse /your/repository/here repo

git sparse-checkout命令使用戶可以儘可能輕鬆地進行部分克隆和稀疏檢出,無需將複雜的.gitignore模式匹配編寫到.git/info/sparse-checkoutgit sparse-checkout會直接處理。

git sparse-checkout 可以做四件事:設置(set)要檢出的路徑列表、列印(list)當前列表以及完全啟用(enable)或禁用(disable)稀疏檢出。

要檢出新路徑,只需執行以下命令:

$ git sparse-checkout set /path/to/check/out

此外,對於非常大的倉庫,稀疏檢出模式匹配列表會過於繁雜,Git 現在提供了一種 cone 模式,執行git config core.sparseCheckoutCone進入該模式,允許的模式匹配集將變得更加嚴格,可以直接指定是否在給定子目錄內檢出所有路徑或所有文件,而不是通過 .gitignore 模式匹配。

例如,如果在大型存儲庫中有一個目錄 A/B/C,而 C 是平時執行大部分工作的位置,則它可能需要被完全檢出,但同時還需要讓 A 和 B 檢出足夠多的內容,以便可以到達 C。在 cone 模式下, git sparse-checkout set A/B/C 可以做到這一點。

關於 Git 2.25 的更新內容,詳情查看:





[admin ]

來源:OsChina
連結:https://www.oschina.net/news/112802/git-2-25-0-released
Git 2.25.0 發布,新特性:部分 clone 與稀疏 checkout已經有21次圍觀

http://coctec.com/news/all/show-post-222950.html