[英]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
文件夾復制文件git pull
以確保一切都是最新的幾乎模仿一個新的克隆但避免帶寬浪費?
我試過:
git clone file://home/project/local.git
但它沒有設置正確的遠程; 也不更新。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.