[英]git: keep depth=1 on pulls to reduce repo size
有沒有辦法讓git pull
keep depth=1
,只使用最新的提交,而不是 git 克隆的那個(如果有更新的)?
我做git clone -b some_branch --depth=1 git_repo.git
它以最少的空間使用克隆存儲庫,因為它刪除了所有歷史記錄。 現在,如果我需要再次更新該存儲庫並使用git pull
,它會拉取整個歷史記錄。
這里有一個類似的問題:
如果嘗試接受答案建議並使用git pull --unshallow
然后使用git pull --depth=1
,看起來它不會像git clone --depth=1
那樣減少空間。
所以真正減少存儲庫大小的唯一方法是刪除存儲庫並再次使用depth=1
克隆?。 看起來有點笨拙。
我需要這個的原因是完全克隆時會使用存儲庫,目前大約需要~3 GB
的大小。 大約有 40 個環境使用它。 所以總的來說,它占用了很多空間。 使用淺克隆,它可以減少大約 5 倍。
樣本:
克隆此存儲庫分支 12.0 git@github.com:odoo/odoo.git
,顯示其大小約為 3 GB。
使用depth=1
克隆此存儲庫分支 12.0,顯示大小為 643 MB。
在拉動時使用--unshallow
然后(如此處Converting git repository to shallow?所建議的那樣):
git pull --depth 1
git gc --prune=all
似乎不像淺克隆那樣縮小尺寸。
不幸的是,答案是“不”。 深度將提交放在.git/shallow
文件中。 當檢索提交歷史時,您的請求將停止在淺文件中的提交,但如果有合並到當前分支,它將跟隨那個和它后面的整個歷史。 從我的博客文章Exploring Git Clone --depth 中:
如果你有一個分支結構,當 main 位於c
時,你做了一個git clone --depth=1
:
... - . - . - [c] - . - . - . - . (main)
\ /
. - . - . (xyz)
然后在g
處進行提取,在 d 處進行合並將使您提取幾乎整個歷史記錄( b
除外)。
1000’s of commits - a - . - [c] - d - e - f - g (main)
\ /
x - y - z (xyz)
上述中型博文給出了一些建議,但沒有回答你的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.