簡體   English   中英

是否可以從遠程存儲庫 git clone 但使用本地存儲庫中的對象來節省帶寬?

[英]Is it possible to git clone from a remote repository but use objects from local repository to save bandwidth?

我們有一個幾乎是 GB 大小的存儲庫。 由於它是一個升級項目(從 Python 2 到 Python 3),大多數開發人員已經在他們的本地文件系統中有一個副本(這可能已經過時;並且有自己的遠程名稱)。

是否可以執行git clone <remote-url>使其:

  • 從本地文件系統的.git文件夾復制文件
  • 將源設置為遠程 URL(而不是本地文件系統)
  • 執行git pull以確保一切都是最新的

幾乎模仿一個新的克隆但避免帶寬浪費?

我試過:

  • git clone file://home/project/local.git但它沒有設置正確的遠程; 也不更新。
  • --reference選項: git clone --reference /home/project <remote-url> ; 但這也無濟於事,盡管它聲稱可以節省帶寬。

我可以為此編寫一個 bash 函數,但只是想知道默認情況下是否支持?

你快到了。

git clone /home/project/local.git

創建您在本地已有的副本。 當您指定一個普通路徑(不是file: URL)時,它會盡可能使用硬鏈接來節省空間。

然后調整origin的遠程 URL:

git remote set-url origin <remote-url>

現在您可以獲取更新:

git fetch --prune origin

--prune刪除您可能從本地存儲庫繼承的任何分支。)

最后,做任何你需要做的事情來更新工作樹。 一種可能性是:

git reset --hard origin/master

您的--reference非常接近。 假設file://home/project/local.git意味着您在/home/project/local.git有一個現有的克隆,您需要:

git clone --reference /home/project/local.git <remote-url>

創建新的克隆,而不是:

git clone --reference /home/project <remote-url>

一般來說,如果您能負擔得起額外的磁盤空間,我建議您也添加--dissociate 如果你不能(負擔額外的磁盤空間),使得本地克隆和更新其origin偏遠,如j6t的答案,可能是要走的路。

根據官方文檔,-- --reference--dissociate選項似乎在 Git >= 2.3.0 中工作。 但它似乎只有在最近更新文件夾時才有效(至少在我的系統上):

git clone --reference ~/cache/project --dissociate https://github.com/user/project.git

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM