有没有办法让git pull
保持depth=1
,只使用最新的提交,而不是生成git克隆的提交(如果有更新的提交(?
我做git clone -b some_branch --depth=1 git_repo.git
它以最小的空间使用率克隆存储库,因为它删除了所有历史记录。现在,如果我需要再次更新该存储库并使用git pull
,它会提取整个历史记录。
这里有一个类似的问题:
使用--depth 1 克隆后,使用git拉取更新
如果尝试接受回答建议并使用git pull --unshallow
,然后使用git pull --depth=1
,则它看起来不会像git clone --depth=1
那样减少空间。
因此,真正减少存储库大小的唯一方法是删除存储库并再次使用depth=1
进行克隆?。看起来有点笨拙。
我需要它的原因是,完全克隆时会使用存储库,目前大小约为~3 GB
。它的使用环境大约有40种。所以总的来说,它占用了很多空间。使用浅克隆,它可以减少大约5倍。
样本:
克隆此存储库分支12.0git@github.com:odoo/odoo.git
,显示其大小约为3 GB。
使用depth=1
克隆此存储库分支12.0,显示大小为643MB。
在pull上使用--unshallow
,然后(如这里所建议的,将git存储库转换为浅存储库?(:
git pull --depth 1
git gc --prune=all
看起来并不像浅克隆那样缩小大小。
不幸的是,答案是"否";。Depth将提交放置在.git/shallow
文件中。当检索提交历史记录时,您的请求将停止在浅文件中的提交处,但如果合并到当前分支中,它将跟随当前分支及其后面的整个历史记录
如果你有一个分支结构,当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)
上面的博客文章给出了一些建议,但没有回答你的问题。