git 的精简包是什么?

2024-05-29

我还没有找到太多关于瘦包的信息,并且手册页的信息对此相当含糊。我知道这与连接速度慢有关,但是什么是“连接速度慢”?

它的优点和缺点是什么?什么时候应该使用它,什么时候不应该使用它?


根据记录,手册页(index-pack) https://www.git-scm.com/docs/git-index-pack/1.5.5 states:

这是可能的git-pack-objects https://git-scm.com/docs/git-pack-objects/1.5.5构建“薄”包,其中根据包中未包含的对象以增量形式记录对象,以减少网络流量.
这些对象是预计出现在接收端并且它们必须包含在包中,以便该包是独立的且可转位的。

这样就完成了git push手册页 https://git-scm.com/docs/git-push/1.5.5 of the --thin option:

精简传输花费额外的周期来最大限度地减少要发送的对象数量,并用于较慢的连接

因此,在这种情况下,“慢速网络”是指您希望发送尽可能少的数据量的连接。

更多信息请访问 ”对于高延迟磁盘,Git 提取许多文件的速度很慢 https://stackoverflow.com/a/52452772/6309".


In 这个线程 http://lists.zerezo.com/git/msg671984.html, 雅库布·纳伦布斯基 https://stackoverflow.com/users/46058/jakub-narebski解释更多(在远程端和本地端使用 git gc 的上下文中):

Git 进行增量化only在包文件中。
但是当你通过 SSH 推送时,git 会生成一个包文件,其中包含对方没有的提交,并且这些包是薄包,因此它们也有增量......
但远程端随后会向这些薄包添加底座,使它们成为独立的。

更确切地说:

在本地端:
git-commit创建松散(压缩,但未增量)对象。git-gc包装和增量。

在远程端(对于智能协议,即 git 和 ssh):
git 创建thin包装,精致;
在远程端,git 要么通过添加基础对象(对象+增量)来使包变厚/自包含,要么将包分解为松散对象(对象)。
您需要远程服务器上的 git-gc 才能在远程端完全 deltify。但转移是完全的 德尔特化。

在远程端(对于哑协议,即 rsync 和 http):
git 找到所需的包并将其整个传输。
所以情况就像在本地一样,但 git 可能会传输比实际需要的更多的内容,因为它传输的是完整的包。


上述问题与使用(或不使用)git push --thin: 什么时候用,什么时候不用?
事实证明,如果您希望 git 利用这些薄数据包,您确实需要仔细管理您的二进制对象:

  1. 只需复制旧文件名即可创建新文件名(因此使用旧的 blob)
  2. commit
  3. PUSH
  4. 复制真正的新文件
  5. commit
  6. PUSH.

如果省略第3步中间的PUSH,则“git push", nor "git push --thin” 可以意识到这个新文件可以在远程端“增量构建”(即使 git-gc 完全将其压缩在包中)。

事实上,精简包的工作方式是针对未包含在包中的基础对象存储增量。
那些未包含但用作增量基础的对象当前只是文件的先前版本,该文件是要推送/提取的更新的一部分。
换句话说,必须有同名的先前版本才能运行。
如果之前的提交有数千个文件需要测试,那么否则就无法扩展。

这些精简包是针对同一文件的不同版本而设计的,而不是针对内容几乎相同的不同文件。问题是决定将哪个首选增量基添加到对象列表中。目前仅考虑与正在修改的对象具有相同路径的对象。

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

git 的精简包是什么? 的相关文章

  • Git 将新的本地分支推送到远程,无需指定名称

    当针对特定的跟踪问题进行补丁修复时 我们的工作流程如下所示 1 git checkout patch git pull upstream patch make sure we re up to date 2 git checkout b i
  • 如何给 Git 控制台着色?

    我最近看到gitWindows 中的控制台是彩色的 例如绿色表示添加 红色表示删除等 我如何为我的颜色上色git这样的控制台 为了安装它 我使用了以下命令 sudo apt get install git core As noted htt
  • 我应该从哪里安装 git:xcode-select --install 还是brew install git?

    我应该从哪里安装 git xcode select install or brew install git 你需要做xcode select install无论如何 如果你想做任何开发 然后你可以做 brew install git 它将安
  • 当我所做的只是压缩提交时,为什么 git-rebase 会给我带来合并冲突?

    我们有一个包含 400 多个提交的 Git 存储库 其中前几十个提交需要大量的反复试验 我们希望通过将许多提交压缩为单个提交来清理这些提交 当然 git rebase 似乎是最佳选择 我的问题是它最终会产生合并冲突 而且这些冲突并不容易解决
  • git 中的 web.config 和 app.config 机器特定设置

    我们在不同的办公室有多个开发团队 他们需要为我们项目中的许多配置设置使用不同的值web config and app config files 我们希望使用一组合理的默认值来检查这些配置文件 这样通过检查 trunk master 分支 您
  • Git 更新文件时更改默认 umask

    我的 Git 有问题 我在 Google 和 StackOverflow 中搜索了解决方案 但没有任何帮助 问题是 每次 git 更新工作目录中的某些文件时 当我签出分支或合并分支等时 文件权限都会更改 以便添加 可写到组 标志 如果该文件
  • Visual Studio 代码中的“Git:gpg 未能签署数据”

    全新安装 Linux 后 我尝试设置我的环境 并且不断收到Git gpg failed to sign the data在本地提交更改时出错 我使用的是 Visual Studio Code 专有版本 而不是开源版本 gitconfig u
  • github 网络图查看器的替代品? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 当我单击 github 上的 forks 按钮时 我想获得一个摘要 这就是我使用网络图查看器获得的结果 但它并不完全理想 我会做什么ide
  • Git 粒度——解决一行内的差异

    git 基于行的粒度或 diff 粒度是否可以增加到单词 字母分辨率 每行多条语句或使用 git 编写纯文本是值得的 根据评论重新阅读问题时 我想我明白了您最初的意思 所以我将给出一个真正的答案 与伊斯梅尔 巴达维的一行评论 https s
  • Git 和外部备份。子目录是空的,我宁愿它不是空的。

    我想使用 Git 创建外部备份系统 这部分是受到答案的启发在外部磁盘上备份整个 git 存储库的最佳方法是什么 https stackoverflow com a 4372855 2533127 其中建议如下 您还可以通过启动一个新的存储库
  • git 列出所有可用命令

    有没有命令可以显示 GIT 中所有可用命令的列表 有git help但它显示 usage git version exec path
  • 如何从旧提交创建新的 Git 分支? [复制]

    这个问题在这里已经有答案了 可能重复 最近 不太明确的问题 使用 Git 从先前的提交分支 http stackoverflow com questions 2816715 branch from a previous commit usi
  • 从子文件夹自动部署 Heroku

    我知道你可以从github自动部署到heroku 但我还没有找到一种方法只将子文件夹从github推送到heroku 从命令行我知道可以通过以下方式执行此操作 git subtree push prefix
  • 如何在cygwin下更改git中文件的大小写?

    我们在区分大小写 不敏感的混合环境 cywgin linux 中工作 今天有人通过重命名文件 将 S 更改为 s 对我们的工作流程造成了小破坏 这导致了各种有趣的跨分支合并问题 而且说实话 没有人完全确定发生了什么 在 cygwin 的 g
  • Mac 操作系统屏幕上的 Git 自动补全

    我在 mac 上使用 git 并配置了自动完成功能 如下所示http www codethatmatters com 2010 01 git autocomplete in mac os x http www codethatmatters
  • git pull 保留本地未提交的更改

    即使存在上游更改 如何安全地更新 拉取 git 项目 保持特定文件不变 myrepo config config php 有没有一种方法 即使这个文件在远程被更改 当我 git pull 时 其他所有内容都被更新 但这个文件没有改变 甚至没
  • Heroku——从多台计算机部署?

    我有两台计算机 我希望它们都能够从 github 上的同一个存储库拉取 推送 并部署到 heroku 上的同一个应用程序 我知道 Heroku 允许您在另一台计算机上克隆其 git 存储库 以便它也可以链接起来 但我不希望第二台计算机克隆
  • git fetch 失败“refs/remotes/origin/pr/34 同时跟踪两者”

    我是 git 新手 我被困在 git fetch 上 我在 TFS 和 SVN 上有更多经验 所以欢迎任何类比 所以我在 Github 上找到了一个我分叉的项目 源项目 Xpose 有色状态栏 https github com Mohamm
  • git 策略将一组提交限制在特定分支

    我需要经常在 dev 和 master 之间进行合并 我还有一个提交 我只需要应用于开发人员 以便在本地工作 早些时候 我只从 dev 合并到 master 所以我有一个分支 production changes 其中包含 dev 特殊提交
  • 如何在不修改 git 历史记录的情况下在我的源代码上运行代码格式化程序?

    我正在尝试使用代码格式化工具格式化整个存储库 这样做时 我想保留有关谁提交了哪一行的信息 以便像这样的命令git blame仍然显示正确的信息 我的意思是它应该显示作者之前编辑过每一行 在格式化之前 git filter branch 命令

随机推荐

  • typedef 有什么用?

    C语言中typedef关键字有什么用 什么时候需要 typedef http en wikipedia org wiki Typedef用于将某物定义为type 例如 typedef struct int a int b THINGY 定义
  • 如何在简单的 Elixir 脚本中加载 Elixir 库?

    在 ruby 脚本中 我可以简单地执行以下操作 require some gem SomeGem do something 我怎样才能在 Elixir 中做类似的事情exs脚本而不创建一个全新的混合项目 到目前为止 我已经在谷歌上搜索了执行
  • 迭代比线性代码慢吗?哪一个更可取?

    最近几天我脑子里一直有一个问题 在用 ruby 编写代码时 线性代码是否比迭代更快 更好 让我举个例子 有一个用于相同功能的代码块以两种不同的方式编写 Way 1 dog cat tiger each do pet name puts I
  • 将 sympy lambda 传递给 multiprocessing.Pool.map

    我想并行执行 sympy lambda 函数 我不知道 为什么它是并行工作的 尽管它是一个 lambda 函数 为什么当我尝试在没有池的情况下执行时它停止工作 如果我取消注释第一个返回 为什么它会起作用lambdify 显然 Markdow
  • “纯”MVC 实现有多大用处?

    我在一家提供类似 CRM 的定制软件的公司工作 我们目前正在重新设计 重新开发该软件 希望它看起来更现代 并且更容易为未来的客户开发和定制 目前 定制每个新应用程序都需要很长时间 有一种假设是 花费这么长时间的原因是 视图 层中存在大量业务
  • 如何更新由基类的可变默认参数创建的属性,而不修改该参数? [复制]

    这个问题在这里已经有答案了 我发现新式类中的子类化和字典更新存在一个奇怪的问题 Python 2 6 2 r262 71605 Apr 14 2009 22 40 02 MSC v 1500 32 bit Intel on win32 gt
  • 如何在R中逐行写入文件

    我正在尝试逐行读取 csv 文件 并且仅选择左侧的第二个和第三个单元格以及右侧的第三个单元格 例如 如果这一行中有 17 个单元格 我将选取第 15 个单元格 然后我想合并这 3 个单元格 用逗号分隔 然后将此行写入一个新的 csv 文件
  • 未作为最后一个参数传递时的模板参数包推导

    考虑以下代码 include
  • 将结构体数组传递给函数 C++

    抱歉这个菜鸟问题我只是有点困惑 如果我在 main 中有一个结构数组 我想将其传递给函数 struct MyStruct int a int b char c mayarray 5 MyStruct StructArray 10 myFun
  • 如何在反编译apk中获取Google-Service.Json文件?

    我想知道是否有可能获得google service json对 Android apk 进行逆向工程时的文件 因为在 firebase Google Service json 文件中包含项目的所有密钥 JSON 文件不包含在您的 APK 中
  • 如何从连接字符串中提取数据库名称,而不考虑 RDBMS?

    我正在研究一个不知道正在使用的 RDBMS 的课程 当然 应用程序的其余部分都清楚这一点 连接字符串是此类的输入 我需要数据库名称 无论 RDBMS 如何 如何从连接字符串中提取数据库名称 我读到以下问题 如何使用 SqlConnectio
  • 在该对象调用的事件期间销毁该对象

    我有一个按钮 它的 OnClick 事件调用一个销毁按钮的过程 但随后 线程 想要返回到 OnClick 事件 并且我遇到了访问冲突 我完全被难住了 您需要在按钮的所有代码执行完毕后销毁该按钮 执行此操作的标准方法是将用户定义的消息发布到表
  • 避免 JavaScript 依赖项污染全局命名空间

    我正在构建一个 javascript 库 并希望在不污染全局命名空间的情况下烘焙各种依赖项 例如 jQuery Google Closure 等 这尤其重要 因为其他人可能已经在使用这些库的不同版本 据我所知 大多数这些库都直接附加到win
  • TSQL:无法对 COUNT(*) 执行聚合函数 AVG 来查找一天中最繁忙的时间

    考虑一个保存日志数据的 SQL Server 表 重要的部分是 CREATE TABLE dbo CustomerLog ID int IDENTITY 1 1 NOT NULL CustID int NOT NULL VisitDate
  • 在方法/数据成员中向 WCF 添加限制

    我是 WCF 新手 我尝试对数据成员添加限制 例如在这个方法中 DataMember public string StringValue get return stringValue set stringValue value 我想设置最大
  • webpack 在 jest 单元测试中需要非 js 内容

    最近我将我的一个项目转换为 webpack 和 babel 它由淘汰组件制成 我在运行单元测试时遇到问题 如果我有一个文件tests文件夹之类的 import component from custom options test adds
  • 如何在Linux终端中使用外部jar文件编译java项目

    我有一个项目 其中包含外部 jar 文件 我点击了此链接http www wikihow com Add JARs to Project Build Paths in Eclipse 28Java 29 http www wikihow c
  • google.cloud.pubsub_v1.PublisherClient 线程安全吗?

    我正在使用谷歌云 PubSub 想知道是否google cloud pubsub v1 PublisherClient是线程安全的 我是否需要将此对象的新实例传递给每个threading Thread或者跨线程共享同一个实例是否安全 这取决
  • JpaRepository 上的@Transactional

    我正在使用只读数据库将一些数据输入到我的项目中 我们使用带有 jpa 和 hibernate 的 Spring v3 以下注释是否会使对我的存储库的所有调用成为只读事务 或者我是否需要调用存储库的服务层上的注释 package com bl
  • git 的精简包是什么?

    我还没有找到太多关于瘦包的信息 并且手册页的信息对此相当含糊 我知道这与连接速度慢有关 但是什么是 连接速度慢 它的优点和缺点是什么 什么时候应该使用它 什么时候不应该使用它 根据记录 手册页 index pack https www gi