繁体   English   中英

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

[英]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 ,它会拉取整个历史记录。

这里有一个类似的问题:

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

如果尝试接受答案建议并使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM