git:在拉升时保持depth=1以减少回购规模

  • 本文关键字:depth git git
  • 更新时间 :
  • 英文 :


有没有办法让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)

上面的博客文章给出了一些建议,但没有回答你的问题。

最新更新