美文网首页Git使用Git
如何控制 Git 库的膨胀? GC 一步搞定!

如何控制 Git 库的膨胀? GC 一步搞定!

作者: f84f7927e7c1 | 来源:发表于2018-09-13 11:01 被阅读2次

相信每个公司都有自己的官网。小明公司也不例外,不过小明却发现公司的“猿”哥哥将许多视频放在了代码仓库里,导致原本只有代码的仓库从早期的几十MB,飙升至 1G以上,变得无比臃肿(或者是慢慢臃肿)。这时老板大手一挥删了所有视频,理论上是该缩小的,但小明发现仓库大小没有变化。明明删了视频,怎么仓库竟没有变化?

到底发生了什么导致 Git 库的膨胀?

根据 Git 的数据存储机制,只要通过命令 git add 将文件存储至暂存区,都会对版本库中的每一个文件,不论是图片、视频、源文件还是二进制文件生成相对应的 Blob 对象(即一段二进制数据)。 

如果你的项目中不小心打包进来了比较大的 word 文档或视频资源,Git 本身又识别不了该类型文件,只能当作二进制文件全量存储。所以,在其他人拉取该 word 文档更新完后再推远程分支的时候,则会使得 .git 下面的 objects 的文件夹大小迅速膨胀。 

上面使用场景中表面上少了500M空间,实则增加了一次至少500M的历史提交记录,仓库容量没有变化。

如何精简你的 Git 仓库?

第一种方案:压缩 Git 仓库。

例如,码云项目管理中会提供存储库 GC 功能,用于清理悬空文件,压缩存储库对象,减少存储库磁盘占用。 

第二种方案(推荐):删除大文件提交记录。

查看存储库中的大文件: 

git rev-list --objects --all | grep -E `git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}' | sed ':a;N;$!ba;s/\n/|/g'`

改写历史,去除大文件

git filter-branch --tree-filter 'rm -f path/to/large/files' --tag-name-filter cat -- --all

git push origin --tags --force

git push origin --all --force

并告知所有组员,push 代码前需要 pull rebase,而不是 merge,否则会从该组员的本地仓库再次引入到远程库中。

更多码云企业版的特性请浏览: https://gitee.com/enterprises

往期精彩:

微信小程序如何使用 Git 实现版本管理和协作开发

初创企业限时特惠,999 即可购买码云标准版

码云企业版上线禁止 Git 强推功能,避免仓库内容被覆盖

想要快速上手 Spring Boot ?看这些教程就足够了!| 码云周刊第 81 期

相关文章

  • 如何控制 Git 库的膨胀? GC 一步搞定!

    相信每个公司都有自己的官网。小明公司也不例外,不过小明却发现公司的“猿”哥哥将许多视频放在了代码仓库里,导致原本只...

  • 如何使用git进行版本管理

    git对象模型 刚接触git版本库的时候,我就非常好奇,它是如何做版本控制的?版本库大小为什么又没有膨胀?它究竟是...

  • git库减小体积命令

    git库减小体积命令:git gc --prune=now 参考资料:https://www.jianshu.co...

  • git 常用指令

    如何使用git管理代码 git 常用命令速查 创建版本库 git clone (url) #克隆远程版本库 git...

  • Git的使用

    一、Git概述 1.定义 git是分布式版本控制系统 2.git与svn的比较 版本库:版本库(仓库)可以简单理解...

  • Git--版本控制(五)添加远程库

    Git--版本控制(引用)廖雪峰老师 我们如何创建自己的版本库并使用呢? Github需要代理才能访问? 我们可以...

  • git

    git命令 git介绍 分布式版本控制系统。 git版本库操作 创建git仓库在C:\github\创建目录hel...

  • 【作业】git 简单应用

    如何初始化版本库:git init 如何查看仓库的状态:git status 如何把某个文件添加到 Git 暂存区...

  • Git笔记

    Git教程 Git简介 安装Git 创建版本库 版本控制 远程仓库 分支管理 创建与合并分支 简单的命令 查看分支...

  • git学习笔记

    推荐git bash\sourceTreegit 版本控制工具;工作流: 工作区-》暂存区-》版本库 1、git ...

网友评论

    本文标题:如何控制 Git 库的膨胀? GC 一步搞定!

    本文链接:https://www.haomeiwen.com/subject/ckxwgftx.html