git:在拉取时保持深度=1以减少回购大小

And*_*ius 5 git

有没有一种方法可以让git pullkeepdepth=1只使用最新的提交,而不是 git clone 所做的提交(如果有更新的提交)?

我做git clone -b some_branch --depth=1 git_repo.git

它以最小的空间使用量克隆存储库,因为它删除了所有历史记录。现在,如果我需要再次更新该存储库并使用git pull,它会提取整个历史记录。

这里有一个类似的问题:

使用 --depth 1 克隆后使用 git 拉取更新

如果尝试接受答案建议并使用git pull --unshallowthen git pull --depth=1,看起来它不会像git clone --depth=1以前那样减少空间。

因此,真正减少存储库大小的唯一方法就是删除存储库并depth=1再次克隆?看起来有点笨拙的方法。

我需要这个的原因是,完全克隆时使用了一些存储库,目前的~3 GB大小大约是这样。使用它的环境大约有 40 个。所以总的来说,它使用了大量的空间。如果是浅克隆,可以减少5倍左右。

样本:

克隆此存储库分支 12.0 git@github.com:odoo/odoo.git,显示其大小约为 3 GB。

使用 克隆此存储库分支 12.0 depth=1,显示大小为 643 MB。

使用--unshallowon pull 然后(按照此处的建议将 git 存储库转换为浅层?):

git pull --depth 1
git gc --prune=all
Run Code Online (Sandbox Code Playgroud)

似乎没有像浅克隆那样缩小大小。

小智 2

不幸的是,答案是“不”。文件中提交的深度.git/shallow。检索提交历史记录时,您的请求将停止在浅文件中的提交处,但如果合并到当前分支,它将遵循该分支及其背后的整个历史记录。来自我的博客文章,探索 Git Clone --deep

\n

如果您有一个分支结构,git clone --depth=1当 main 位于 时,您执行了以下操作c

\n
...  -  .  -  .  - [c] -  .  -  .  -  .  -  .  (main)\n         \\               /\n           .  -  .  -  .  (xyz)\n
Run Code Online (Sandbox Code Playgroud)\n

然后稍后在 处进行提取g,在 d 处合并将导致您提取几乎整个历史记录(除了b)。

\n
1000\xe2\x80\x99s of commits  -  a  -  .  - [c] -  d  -  e  -  f  -  g  (main)\n                       \\               /\n                         x  -  y  -  z  (xyz)\n
Run Code Online (Sandbox Code Playgroud)\n

上面的中等博客文章提供了一些建议,但没有回答您的问题。

\n