Git 中的数据完整性?

2024-06-19

我现在已经多次听到提到 Git 提供数据完整性。但是,这是什么意思?

据我所知,git 中的所有对象都是使用 SHA-1 校验和来访问的,并且该校验和是根据文件的内容计算的。这意味着如果文件发生更改,您将得到不同的校验和。

但这如何提供数据完整性呢?如果我根据校验和(密钥)查找某些数据,如果未找到(如果它已损坏),则 git 将返回错误。我认为使用 git 时数据仍然可能被损坏 - 磁盘读取错误等。

真的看不出有什么区别,例如此处的 SVN 或 Git 中如何实际提供数据完整性。


如果我根据校验和(密钥)查找某些数据,如果未找到(如果它已损坏),则 git 将返回错误。

本质上是的。假设原始正确数据的校验和为1234。Git 存储此校验和并通过该校验和查找数据。 (这就是它的“内容可寻址”的工作原理:通常以分支名称开头,例如master,它映射到一个提交 ID,例如56789ab...。该映射保存在 git 的“refs”中,它比其他数据更容易受到攻击,但我们暂时假设这部分保持不变。)

然后 Git 通过 ID 提取提交,并将内容的校验和与 ID 进行比较。这必须匹配,否则提交内容会损坏。假设内容有效,它们包含一个(单个)树 ID(加上有关提交的信息:谁制作的、何时制作、其父级等等)。

然后 Git 通过 ID 提取树内容,并将内容的校验和与 ID 进行比较。这必须匹配,否则树内容将被损坏。假设内容有效,它们包含一系列给出文件模式、名称和 ID 的元组。对于每一行,该模式区分附加树或纯文件(“blob”)。名称是子树或文件的名称,ID 是内容的校验和。

然后 Git 通过 ID 提取子树或 blob 内容,并比较校验和。这必须匹配,否则内容会损坏。假设内容有效,子树像以前一样递归处理,并且文件是正确的(未受损)。

请注意,在此过程中,任何捕获的错误都只是告诉您出现了问题,但并不能解决问题;为此,您需要一个备份(例如存储库的另一个副本)。如果故障发生在整个过程中相当远的地方,很明显数据已损坏,因为校验和的有效时间足以在故障之前找到提交和树,也许还有几个子树。

如果参考文献被损坏,就很难重建。然而,git 可以遍历数据库中的每个对象并查看是否有“未引用”的对象。此类对象是损坏引用的候选对象should观点。实际上,解决这个问题通常是毫无意义的困难:您只需转到在损坏的 blob 情况下使用的相同备份即可。

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

Git 中的数据完整性? 的相关文章

  • 从非 git 文件夹添加/提交到裸存储库

    我正在尝试破解 git 来为我做备份 数据相对来说太大了 我无法在我的任何硬盘上提供工作副本和 git 存储库 因此 我需要从非 git 文件夹中 git add commit 到裸存储库 硬盘 1 工作副本 非 git 硬盘 2 裸 gi
  • 将一个存储库的更改合并到具有不同树结构的另一个存储库

    我有两个 Git 存储库 foo master 和 bar master In foo code root gt dirA gt dirB gt some files In bar code root gt same files as ab
  • git Push 崩溃并显示“inflate returned -551”

    将 git 存储库从一台 ubuntu 服务器推送到另一台 ubuntu 服务器时 出现以下错误 Pushing to gitosis xxx yyy Enter passphrase for key home ngrislain ssh
  • 解决方案具有位于解决方案文件夹外部的项目

    我尝试通过选择将我的解决方案添加到本地存储库File 添加到源代码管理 但我收到以下消息 源代码控制 Git当前解决方案包含位于解决方案文件夹外部的项目 这些项目不会在 Git 存储库中进行源代码控制 要将所有项目添加到单个 Git 存储库
  • Git - “非单调索引”

    我正在本地电脑上克隆 git 存储库 在此过程中 该命令会输出大量以下错误消息 error non monotonic index git objects pack pack idx 例如 该消息保留在拉动或分支交换机上 但一切似乎都有效
  • 全局 Git 忽略

    我想将 Git 设置为全局忽略某些文件 我添加了一个 gitignore文件到我的主目录 Users me 并且我添加了以下行 tmproj 但它并没有忽略这种类型的文件 知道我做错了什么吗 您需要设置您的全局core excludesfi
  • Git 将合并恢复到特定父级

    我有一个 git 存储库 但在恢复合并时遇到问题 当前哈希为 0ce2ca0b35f59af267241cf4d40d16a3e13ba6f3 它有两个父母 df1acf5f54426d30f12c6b4558c3dd922297aae3
  • 如何比较本地 Git 分支与其远程分支

    我怎样才能看到diff本地分支和远程分支之间 git diff
  • 在 GitHub 上看不到“在 Xcode 中打开”按钮

    正如在GitHub 和 Xcode 9 中的新源代码管理工作流程 https developer apple com videos play wwdc2017 405 time 204Apple 视频会话 我们可以直接从 Xcode 克隆项
  • git pull:无法快进,

    你能帮我解决我的问题吗 当我尝试从 dev 分支拉取时发生错误 我浏览了解决方案 它说我需要 rebase 但它对我来说没有成功 CT aohc MP1GYWQA MINGW64 c TCO source RAPMD Web Fronten
  • 在“git rm -rf”之后恢复暂存但未提交的文件

    在我的本地计算机上 我从文件夹中删除了文件 git init git add all 然后我写了 不要问我为什么 git rm rf 我还没有承诺 现在我的项目中有空文件夹 在 git文件夹有objects包含 53 Mb 的文件 我怎样才
  • 如何给 Git 控制台着色?

    我最近看到gitWindows 中的控制台是彩色的 例如绿色表示添加 红色表示删除等 我如何为我的颜色上色git这样的控制台 为了安装它 我使用了以下命令 sudo apt get install git core As noted htt
  • 如果检测到更改中的特定短语,如何阻止 git commit?

    我注意到开发人员倾向于做的一些模式 例如使用以下代码提交 javascript 测试fdescribe or fit留在其中 这意味着只有一个测试 套件将运行 通常是在审查阶段发现的 但最好尽早发现这些小事情 想知道是否有一种方法可以配置
  • 当存储在变量中时,Git 提交消息变得混乱[重复]

    这个问题在这里已经有答案了 我有一个 Git 提交 其中有一个摘要 然后是一些描述 所以当我看到提交消息时git log format B n 1
  • 尽管存在但未找到 Git https:// 存储库

    我在 github 上有一个私人仓库 它的位置被改变了 我尝试更换遥控器 但无法再按了 ls remote https github com xxxxx xxxxx git 给了我这个 远程 未找到存储库 致命 存储库 https gith
  • Visual Studio 代码中的“Git:gpg 未能签署数据”

    全新安装 Linux 后 我尝试设置我的环境 并且不断收到Git gpg failed to sign the data在本地提交更改时出错 我使用的是 Visual Studio Code 专有版本 而不是开源版本 gitconfig u
  • Git fetch 在 for-each-ref 中不显示远程分支

    我有一个远程分支feature test2 我想把它拿过来 我跑 git fetch origin feature test2 我得到 From
  • 如何找出在哪个提交中添加了特定代码?

    我想知道我在哪个提交中添加了下面给出的代码 if getListView getChildCount 0 getActivity findViewById android R id empty setVisibility View VISI
  • 是否可以在 Git 项目的所有分支中执行“grep 搜索”?

    是否可以运行git grep在 Git 控件源项目的所有分支中 或者还有其他命令要运行吗 问题 如何在 Git 历史记录中 grep 搜索 提交的代码 https stackoverflow com q 2928584 6309 建议 gi
  • 更快的“git rebase --preserve-merges”方法

    我通过创建一系列功能分支来使用 git 并在完成后将它们合并到 mastergit merge no ff 这会创建空的合并提交 可用于识别先前功能分支的起点和终点 为了处理多个并发分支 甚至嵌套分支 我使用 rebase 我从不合并回去

随机推荐

  • tkinter - 使用按钮在帧之间来回切换

    我需要功能 最好是一个功能 当按下下一页和后退按钮时可以在页面之间来回切换 我想这可以通过将布尔变量分配给后退和下一页按钮来完成 不确定是否可以这样做 来确定您是否要前进或后退所有页面的有序列表 需要知道当前升高的框架的索引 索引可用于找出
  • 在 Chrome 中,应用于包含图像的锚点的轮廓高度不正确

    对于我正在开发的网站 我希望当链接聚焦 悬停 活动时 链接周围会出现虚线轮廓 我希望文本和图像链接发生这种情况 我遇到的问题是 虽然我的代码在 Firefox 和 IE 中运行良好 但在 Chrome 7 0 517 41 中 虚线轮廓与我
  • 带数据透视表的 Laravel 查询生成器

    我有两个带有数据透视表的表 Table tours id name country id featured Table countries id name 数据透视表country tour id country id tour id 我想
  • Jasmine 测试中模拟 window.location.reload

    我创建了一个window location reload我的 JavaScript 中的函数 我需要在 Jasmine 中测试时模拟重新加载函数 因为它不断循环 当我跑步时测试进展顺利grunt jenkins 但在浏览器 mozilla
  • 如何通过 COM 将长数组从 VB6 传递到 C#

    我需要将 int 或 long 数组 无关紧要 从 VB6 应用程序传递到 C COM Visible 类 我尝试在 C 中声明接口 如下所示 void Subscribe MarshalAs UnmanagedType SafeArray
  • 如何强制串行端口写入方法在发送数据之前等待线路清除?

    以下是我正在尝试做的一些背景 打开从移动设备到蓝牙打印机的串行端口 将 EPL 2 表格发送到蓝牙打印机 以便它了解如何处理即将接收的数据 收到表格后 将一些数据发送到打印机 这些数据将打印在标签纸上 根据需要多次重复步骤 3 打印每个标签
  • 即使没有结果也返回一个值

    我有这种简单的查询 它返回给定 id 的非空整数字段 SELECT field1 FROM table WHERE id 123 LIMIT 1 问题是如果找不到 id 结果集就是空的 我需要查询始终返回一个值 即使没有结果 我有这个东西工
  • 如何使用div绘制曲线?

    我需要使用 CSS 绘制两条曲线 我尝试过组装一些divs 使用CSSborder radius绘制弧形面板 但结果很糟糕 还有更好的算术吗 正如我之前在评论中提到的 请不要使用CSS用于实现复杂的曲线和形状 虽然仍然可以使用 CSS 来实
  • 添加 Google Play Services 9.0.0 后 Dex 文件超过 64k

    我按照 Firebase 指南添加 FCM 因此我将以下依赖项添加到我的应用程序 gradle 中 compile com google android gms play services 9 0 0 apply plugin com go
  • 重新渲染列表模板导致页面滚动到顶部

    我有一些模板 大致如下所示
  • 只获取倒数第二条记录 - mysql-query

    我有一个如下表记录 my table id rating description 1 0 0 bed 2 1 0 good 3 0 0 bed 4 1 0 good 5 0 0 bed 6 0 0 bed 7 0 0 bed 现在我通过评级
  • SSE:如何将 _m128i._i32[4] 减少到 _m128i._i8

    我对 SSE 编码非常陌生 我想将 int32 类型的 m128i 4 的结果存储到 int8 类型的 m128i 中 m128i j i32 k 的值均在 127 和 127 之间 我认为伪代码如下 result i8 vec1 i8 0
  • Ruby 在 Windows 上找不到 sqlite3 驱动程序

    我正在尝试在 Windows 上设置 Ruby on Rails 我正在使用看起来不错的 Flash Rails 发行版 但是 sqlite3 有一个问题 我发现线程告诉我安装版本 1 2 3 安装得很好 我使用的是 ruby 1 9 0
  • 程序堆栈真的会溢出吗?

    如果达到堆栈大小限制 处理器是否会导致操作系统出现 TRAP 从而防止堆栈溢出 P 我相信 Windows 确实有一个堆栈 当您到达末尾时它会增长 在 Visual Studio 编译器中 负责此操作的代码位于chkstk obj modu
  • C++11 容器/适配器属性的实用总结/参考? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在寻找各种 C 11 标准容器和容器适配器的重要属性的全面总结 参考 也可以选择包括 boost Qt 但是按这些属性索引而不是通常的每个容器文档
  • 辍学训练

    如何对由 dropout 产生的许多薄层进行平均 在测试阶段要使用哪些重量 我对这个问题真的很困惑 因为每个细化层都会学习一组不同的权重 那么反向传播是为每个稀疏网络单独完成的吗 这些细化网络之间的权重究竟是如何共享的 因为在测试时仅使用一
  • 在 ASP.NET 中动态设置主题

    我有一个连接到不同域的应用程序 我没有复制和修改每个应用程序 而是在硬盘驱动器上使用相同的物理位置 但在 IIS 上使用单独的应用程序池和网站 基本上我想根据主机名更改主题 IE 用户访问 websome com 获取 websome 主题
  • 在 ruby​​ 中创建登录会话时理解“current_user”概念

    我正在阅读很棒的 Michael Hartl 教程来构建 ruby 应用程序here http ruby railstutorial org chapters sign in sign out sec 3acurrent user 我试图理
  • 将具有子目录的域转发到具有子目录的其他域

    我有一个热爱域名的客户 更喜欢转发域名 其中许多域没有与其关联的网站 它们仅用于营销和转发 我知道如何轻松地将一个域转发到另一个域 但我好奇的是如何将这些域的特定 url 转发到其他特定 url 例如 www site1 com 目录 gt
  • Git 中的数据完整性?

    我现在已经多次听到提到 Git 提供数据完整性 但是 这是什么意思 据我所知 git 中的所有对象都是使用 SHA 1 校验和来访问的 并且该校验和是根据文件的内容计算的 这意味着如果文件发生更改 您将得到不同的校验和 但这如何提供数据完整