Git:保持拉取深度为1以减小仓库大小。

5
有没有办法让git pull保持depth=1,只使用最新的提交,而不是使用git clone时的提交(如果有更新的提交)?
如果我使用git clone -b some_branch --depth=1 git_repo.git,它会以最小的空间使用量克隆存储库,因为它删除了所有历史记录。现在,如果我需要再次更新该存储库并使用git pull,它会拉取整个历史记录。
这里有一个类似的问题: Pull updates with git after cloned with --depth 1 如果尝试接受答案建议并使用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存储库转换为浅层存储库?的重复问题。 - EncryptedWatermelon
@EncryptedWatermelon,最受赞的答案似乎并不适用于所有情况。我尝试了修剪最大的存储库,但它的大小根本没有缩小。虽然另一个较小的存储库确实缩小了。我还尝试了评论中的建议,但仍然没有改变任何东西。 - Andrius
@Andrius:阅读此答案中的所有评论。此外,请查看VonC在那里的答案,并确保您的Git版本足够更新。 - torek
1个回答

2
很遗憾,答案是“不行”。深度会将提交记录放入.git/shallow文件中。当检索提交历史时,您的请求将停留在浅层文件中的提交记录,但如果当前分支合并了其他分支,则会跟随它并显示其背后的全部历史记录。从我的博客文章Exploring Git Clone --depth中可以了解更多信息:

如果您在主分支处于c时有一个分支结构,并执行了git clone --depth=1

...  -  .  -  .  - [c] -  .  -  .  -  .  -  .  (main)
         \               /
           .  -  .  -  .  (xyz)

然后稍后在 g 进行获取操作,合并时会导致您拉取几乎整个历史记录(除了 b)。
1000’s of commits  -  a  -  .  - [c] -  d  -  e  -  f  -  g  (main)
                       \               /
                         x  -  y  -  z  (xyz)

上述Medium博客文章提供了一些建议,但并没有回答你的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接