给服务器端的.git瘦身

2023-11-17

一、背景

git库擅长管理文本型的文件,二进制文件一版不建议用git管理。

现在我们已经用git管理的二进制文件,并且已经有了上百个提交,多个分支,且存储的二进制文件的总和已经相当庞大(可能几十个G,上百G)。

这给我们的git管理带来了以下3问题。

1. 下载时间长。简单的git clone会把整个库clone下来,例如这个库100G(夸张点),我们的下载速度100M/s,clone整个库大概就需要1000s(约20分钟)。

2. 浪费的我们的存储。试问我们的pc/服务器能够储存几个这样的库。

3. 二进制的提交记录毫无意义。

由于这种种原因,我们不得不给.git进行瘦身。

二、解决方案。

1. 在本地对git log进行压缩。如图所示的压缩方式。

branch_A 说明 branch_A_new
patch 101 保留最新的提交,并cherry-pick到branch_A_new中。 patch 101~
patch 100 把patch压缩成一个。patch1-patch99的数据就是成为了无效数据(即commit/tree/blob,我们没有办法获取到) patch 1~
patch 99
...
patch 2
patch 1
init git  第一个提交保留不变 init git

2. 把branch_A_new强制push到服务器中。

    git push -f origin branch_A_new:branch_A

3. 在服务器端的该xx.git库中执行git -c清理git库。

#查看git库中悬空对象(dangling objects)(没有分支跟踪的commit/tree/blob),执行结果会返回悬空对象。可反复使用查看。

git fsck --unreachable --no-reflogs 

#应用git gc删除悬空对象(dangling objects)

git -c gc.reflogExpire=0 -c gc.reflogExpireUnreachable=0 -c gc.rerereresolved=0 -c gc.rerereunresolved=0 -c gc.pruneExpire=now gc

#此命令可来源:

file - How to remove unused objects from a git repository? - Stack Overflow

4. 查看xx.git库的大小。

#查看瘦身后的xx.git的大小,发现已经瘦身成功。

du -hs xx.git  

三、对xx.git库副作用

1. git log信息被裁剪

2. commit的号的哈希值被修改。

3. tag所能到达的commit/tree/blob 是无法清理。如需清理,只能先删除tag。 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

给服务器端的.git瘦身 的相关文章

  • 如何在Electron WebView中连接到代理?

    因为我可以通过连接到免费代理服务器 或付费 目前用作电子 JS 解决方案作为桌面应用程序 代理列表服务器示例 http proxylist hidemyass com http proxylist hidemyass com 您可以使用 s
  • 如何解决 Socket.io 404(未找到)错误?

    我正在使用 Socket io 和 Express 在我的项目中 我有一个登录页面和一个主页 当我成功登录时 我导航到 localhost 3000 home 并收到以下错误 GET http localhost 3000 socket i
  • libxmljs 的替代品 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 目标 使用 Node js 访问网页 使用 xpath 语法操作 DOM 并打印新的 DOM libxm
  • Node.js 重写 toString

    我试图覆盖我的对象的默认 toString 方法 这是代码和问题 function test this code 0 later on I will set these this name test prototype toString f
  • 如何在 Sequelize ORM 中限制连接行(多对多关联)?

    Sequelize 定义了两种模型 具有多对多关联的 Post 和 Tag Post belongsToMany db Tag through post tag foreignKey post id timestamps false Tag
  • Sequelize - 使用 es6 和模块运行迁移

    我不确定我是否做错了什么或者什么 我觉得我正在运行一个现代的 相当常见的堆栈 但我无法让新的 Sequelize v6 与我的设置完美配合 我在 Node v14 17 Sequelize v6 6 2 上 在我的 package json
  • NestJS e2e 测试模拟会话装饰器

    我正在尝试使用 supertest 编写一个 e2e 测试 其中我的控制器实际上使用了 Session 装饰师 然而 我不想承担使用数据库连接等启动会话的全部负担 因此测试中的我的应用程序实际上并未初始化会话 相反 我想首先模拟掉装饰器提供
  • nodemon 安装错误“没有可用于超时的有效版本”

    尝试在全新的节点项目中安装 nodemon 时出现此错误 我创建了一个名为 my project 的空白文件夹 然后 在其中 我执行了创建一个 package json 文件 npm init f 然后当尝试运行时 npm install
  • 根据特定字符获取整个字符串或子字符串

    我有一个包含 MIME 类型的字符串 例如application json 现在我想将其与实际的 HTTP 标头进行比较 在本例中content type 如果标头包含 MIME 类型 那么就很简单 if mimeType contentT
  • Git 更改丢失 - 为什么?

    我们的开发团队正在使用 git 最近我们至少两次丢失了文件更改 我们正在使用私人 Github 存储库 在当前情况下 我们可以返回 Github 上的日志并查看我对文件所做的一些更新 后来 另一位团队成员更改了文件的不同部分 它似乎破坏了我
  • Node.js 和 Passport 对象没有 validPassword 方法

    我正在使用 Node js Express Passport 创建一个简单的身份验证 本地 到目前为止我所达到的效果是 当输入错误的用户名或密码时 用户将被重定向到错误页面 但是当用户输入正确的用户名和密码时 我收到此错误 node mod
  • Git:从 master 以外的分支克隆

    我正在尝试从 Github 的存储库中提取数据 但我不想克隆主分支 我想克隆其他一些分支 当我尝试时git clone
  • 使用 gitignore 嵌套存储库。

    我想嵌套 2 个 git 存储库 我一直在阅读子模块 有一段时间我认为它很棒 我想我可能想要其他东西 这是我的情况 首先 我想我应该提到我的所有服务器都托管网站 并以 staging domain com 和 domain com 实时 模
  • 如何仅在 NextJS 站点构建期间使用 getInitialProps?

    当使用 NextJS 构建静态站点时 我想要getInitialProps方法仅在构建步骤期间触发 而不是在客户端上触发 在构建步骤中 NextJS 运行getInitialProps 方法 https nextjs org docs fe
  • Git 无法识别重命名和修改的包文件

    我有一个名为的java文件package old myfile java 我已经通过 git 提交了这个文件 然后我将我的包重命名为new所以我的文件在package new myfile java 我现在想将此文件重命名 和内容更改 提交
  • 通过 node-http-proxy 保留基于 cookie 的会话

    我有一个简单的基于 Express 的 Node js Web 服务器 用于开发 JavaScript 应用程序 我将服务器设置为使用 node http proxy 来代理应用程序向在不同域和端口上运行的 Jetty 服务器发出的 API
  • Mongoose 和 Promise:如何获取查询结果数组?

    使用猫鼬从数据库和 Q 中查询结果以获取承诺 但发现很难只获取可用用户列表 目前我有一些这样的东西 var checkForPerson function person people mongoose model Person Person
  • 流星内存不足

    我正在使用流星来制作报废引擎 我必须执行一个 HTTP GET 请求 这会向我发送一个 xml 但这个 xml 大于 400 ko 我得到一个异常 内存不足 result Meteor http get http SomeUrl com 致
  • 部分共享git仓库

    我是 git 新手 我想知道是否支持以下场景 如果支持的话如何支持 即用于设置和更新的 git 命令 可以从三个不同的地方获取存储库 本地 镜像 和 github mirror 完全镜像 local github 镜像 local 但 受版
  • VSTS:在构建过期的情况下自动变基/合并和重新排队构建验证门

    我们最近对 PR 上的构建验证门进行了更改 这样 如果另一个提交在当前 PR 完成之前进入主分支 则构建会 立即 过期 看here https stackoverflow com questions 49418800 vsts invali

随机推荐

  • QSS-Qt样式表一

    QSS即Qt StyleSheet Qt样式表 的简称 是一种用来自定义控件外观的强大机制 QSS可以让我们的程序界面更加漂亮 每条QSS样式都由两部分组成 1 选择器 该部分指定要美化的控件 2 声明 该部分指定要在控件上使用的属性 声明
  • 一直在说高并发,多少QPS才算高并发?

    高并发的四个角度 只说并发不提高可用就是耍流氓 可以从四个角度讨论这个问题 首先是无状态前端机器不足以承载请求流量 需要进行水平扩展 一般QPS是千级 然后是关系型数据库无法承载读取或写入峰值 需要数据库横向扩展或引入nosql 一般是千到
  • XShell连接ubuntu20.04.LTS

    1 下载Xshell XShell官方下载地址 打开XSHELL官方下载地址 我们可以选择 家庭和学校用户的免费许可证 输入邮箱之后即可获得下载链接 安装非常简单 跟着提示进行即可 2 连接ubuntu 2 1 查看ubuntu的ip地址
  • Vue 父子组件通信v-model .sync修饰符

    一 v model简化父子组件通信 v model是什么 v model 是Vue框架的一种内置的API指令 本质是一种语法糖写法 它负责监听用户的输入事件以更新数据 并对一些极端场景进行一些特殊处理 v model实现表单的双向绑定
  • 算法:回文链表

    234 回文链表 给你一个单链表的头节点 head 请你判断该链表是否为回文链表 如果是 返回 true 否则 返回 false 示例 1 输入 head 1 2 2 1 输出 true 示例 2 输入 head 1 2 输出 false
  • ReID专栏(三) 注意力的应用

    前言 本文中提出了一种用于行人重识别的注意感知特征学习方法 该方法由一个部分注意分支 PAB 和一个整体注意分支 HAB 组成 并与基础再识别特征提取器进行了联合优化 由于这两个分支建立在主干网络上 因此没有为ReID特征提取引入额外的结构
  • 客户管理系统CRM表格版,含销售合同客户关系维护等功能

    客户管理系统CRM表格版 含销售合同客户关系维护等功能 系统由EXCEL开发 绿色安全 简单好用 送VBA宏插件编号 139653845009471设计师儿
  • 来自国际大厂Cloudflare的免费项目cloudflared

    在此之前 大家可以先去看看项目 https github com cloudflare cloudflared 事先声明 本人使用Ubuntu2204系统搭建 理论上适合Debian系Linux系统 Redhat系需要修改相关命令 其他系统
  • super和this关键字

    一 super关键字的应用场景 1 访问父类的成员变量 2 访问父类的构造函数 3 访问父类的方法 二 super关键字的使用 class Animal protected String name 注意 若限定符是private 子类无法使
  • 项目中都要掌握的BAPI之过账BAPI “ BAPI_ACC_DOCUMENT_POST”

    SAP FI 会计凭证过账 BAPI ACC DOCUMENT POST 该过账BAPI需要和模拟过账的BAPI BAPI ACC DOCUMENT CHECK 搭配使用 这样先执行模拟过账 成功了再执行真正的过账 这样就不会因为执行失败产
  • OpenGL加速渲染:显示列表glGenLists

    在OpenGL中 可能要用非常多的点 线 面来构成一幅图 若进行实时渲染 无疑对显示效率有非常大的影响 比如要画几百万个三角形 那么很可能旋转一下图片需要响应很久 为了加速渲染 可以将需要绘制的部分放在显示列表glGenLists中 每一个
  • git仓库完整迁移(代码,分支,提交记录)

    背景 我们公司使用Git进行版本控制 并使用gitlab搭建了公司的私有Git仓库 后期项目逐渐增多 项目老大为了统一项目权限管理 决定将不同项目统一放到一个Group中 一旦进行项目迁移 项目的git远端地址会发生变化 现在项目正在开发当
  • JavaScript单向链表结构

    JavaScript单向链表结构 h1 见控制台打印 h1
  • 手把手教你使用WinPwn自制iPhone固件

    Pwn破解软件系列的windows版本终于发布 我们可以用这个软件在PC上制作自己的iPhone自制固件 不过根据开发小组介绍这个版本还属于测试版本 某些功能还不能实现 因此破解时需使用Installer下的Bootneuter 详细操作流
  • git常用命令记录

    git常用命令记录 git常用命令 接上一篇搭建hexo github的博客 几次修改文件导致博客无法正常运行 故上传github 备份之 也就有了这篇文章 介绍基本的git命令 git config global user name 你再
  • 股票为什么会涨停?

    原文地址 http news xinhuanet com stock 2004 02 17 content 1318785 htm 股票为什么会涨停 要回答这个问题 有必要先说清楚什么是停板 停板是股票市场中的一种游戏规则 它是为了防止股票
  • 学习C# 哈希表(HashTable)用法

    学习C 哈希表 HashTable 用法 1 哈希表 HashTable 简述 在 NET Framework中 Hashtable是System Collections命名空间提供的一个容器 用于处理和表现类似keyvalue的键值对 其
  • list要点

    基本操作 erase函数 remove函数 特殊变动性操作 List迭代器 list与vector 异常处理 list本质是一个双向链表 其模板定义如下 namespace std template
  • 刷脸支付秒过地铁太快太方便

    刷脸支付让人们生活更便捷 公交卡 零钱 手机统统不用带 在广州 坐地铁只要刷脸就可以啦 据媒体报道 近日 广州首个智慧地铁站开通 乘客可以刷脸无感过闸 300毫秒内完成人脸识别 每分钟可通行40人 几年前 刷脸 还是朋友间用来互相调侃的 转
  • 给服务器端的.git瘦身

    一 背景 git库擅长管理文本型的文件 二进制文件一版不建议用git管理 现在我们已经用git管理的二进制文件 并且已经有了上百个提交 多个分支 且存储的二进制文件的总和已经相当庞大 可能几十个G 上百G 这给我们的git管理带来了以下3问