你能以任何方式在 Git 中获得重复的哈希值吗?这有什么影响

2024-01-02

我的观点是,应该有可能获得重复的 git 哈希,因为哈希代码是唯一性的压缩表示,因此会有一些步骤序列产生相同的哈希代码。更重要的是,应该有一系列步骤,其中提交不同的更改但产生相同的哈希码。

例如,在同一台计算机上克隆同一存储库两次,在不同的存储库中进行几乎相同的更改(保存一个字节或位)并提交。即使在提交中使用了目录名称或时间戳,仍然应该可以获得它(尽管很少见)。例如,两个不同的人在两台不同的机器上同时进行提交。

我的问题有两个方面。这是怎么发生的以及 Git 将如何处理它。

或者更明确地说,git 如何确保您在推送之前是最新的。是否有可能一个人先推送,然后另一个人尝试推送(这两个更改都基于相同的父提交),并且 Git 看到哈希代码与远程和本地历史记录匹配,决定您可以继续,允许您推但你刚刚丢失了其中一项更改?在这种情况下,我认为它更像是以下内容:

回购1 a->b->c1

回购2 a->b->c1'->c2

假设 c1,c1',c2 都在两个存储库克隆到 b 之后发生, 现在repo1推送,没有问题 现在 repo2 尝试推送 c1' 和 c2 并且 git 确定 c1' = c1 但实际上它们不同,git 将 c2 推送到 c1 之上以获得 a->b->c1->c2 我们丢失了 c1' 中所做的更改

这可能吗?它怎么会发生以及 git 会做什么?


关于您的问题中与重复哈希相关的部分:

Git 完全依赖于生成的哈希值的唯一性,据我所知,没有任何保护措施来处理产生相同哈希值的不同数据 blob。然而,发生哈希冲突的可能性非常小,实际上可以忽略不计。如果你还担心的话本节来自 Pro Git http://git-scm.com/book/cs/ch6-1.html#A-SHORT-NOTE-ABOUT-SHA-1可以让你安心:

更有可能的是,你的编程团队的每个成员都会在同一个晚上在不相关的事件中被狼袭击并杀死。

至于你问题的第二部分(发生了什么):

如果您碰巧提交了一个与存储库中的前一个对象散列到相同 SHA-1 值的对象,Git 将看到前一个对象已存在于您的 Git 数据库中,并假设它已经被写入。如果您尝试在某个时刻再次检查该对象,您将始终获得第一个对象的数据。

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

你能以任何方式在 Git 中获得重复的哈希值吗?这有什么影响 的相关文章

随机推荐

  • System.Reflection.TargetInitationException :调用目标已引发异常

    我正在尝试自动化reactjs应用程序以及我们项目使用的基于C 和protractor net构建的框架 在任何单击或断言函数之后 我都会收到以下错误 但代码中定义的操作会成功执行 System Reflection TargetInvoc
  • CNN 上的快速损失收敛意味着什么?

    我正在两个不同的深度学习库 Caffe e Tensorflow 中训练两个 CNN AlexNet e GoogLeNet 该网络由每个图书馆的开发团队实施 here https github com BVLC caffe tree ma
  • HTML Button 的 jQuery 函数在使用 MVC FileResult 时遇到问题

    我打算让这个函数调用我的 MVC 操作方法来返回 CSV 报告 function exportButton click function get curReport GetCSVReport 如果我制作一个像下面的代码一样的按钮 那么当单击
  • 我的 docker 镜像是否需要自己的 consul 客户端实例?

    我有一个 dockerized 应用程序 分为几个容器 一些前端和后端服务器 负载均衡器 mysql elasticsearch 等 负载均衡器的配置需要知道哪些容器已启动 因此我使用 Consul 服务发现来注册服务 但我不太确定在每个
  • 大型 MySQL 表

    对于我正在开发的Web应用程序 我需要存储大量记录 每条记录将由一个主键和一个 短的 字符串值组成 我期望有大约 100GB 的可用存储空间 并且希望能够全部使用 记录会被频繁地插入 删除和读取 我必须使用MySQL数据库 数据完整性并不重
  • PHP + MySQL - 从数据库自动完成而不从表获取数据

    我正在进行一个关于讨论室服务的小型大学项目 现在我的任务是实现订购名称的自动完成功能 我已经用谷歌搜索了一些教程 我不确定出了什么问题 当我尝试输入名称时 前面没有输入任何数据 这是我的表单代码
  • 新 iOS 的应用程序图标大小

    我意识到 iOS 7 尚未发布 不应该被讨论 但我无法在任何地方找到这个问题的答案 iOS 7 几天后就会发布 我提交了 iOS 7 的应用程序 收到一条警告 说我缺少图标大小 120 X 120 这显然是 iOS 7 中图标的新标准大小
  • C# JsonConvert.DeserializeAnonymousType 失败

    我正在尝试反序列化 Azure 函数应用程序中的字符串输入 我的输入是 messageid 1 deviceid Android temperature 20 0 humidity 47 0 eventprocessedutctime 20
  • random.choices 带有加权选项输出

    import random a 1 b 2 c 3 print random choices a b c 50 3 1 上面的代码输出 1 2 或 3 有人可以解释为什么输出有方括号吗 Because random choices popu
  • 如何通过 aws Java SDK 公开 S3 对象?

    如何通过 AWS Java SDK 公开 S3 对象 具体来说 通过 Java AWS SDK 的哪些 API 方法可用于在上传对象时将其公开 在一篇文章中找到了答案亚马逊AWS论坛 https forums aws amazon com
  • Tomcat的BIO Connector和NIO Connector有什么区别?

    我想了解tomcat NIO连接器的内部结构 当我们创建一个实现 CometProcessor 的 servlet 时 线程到底是如何使用的 它仍然是每个连接一个线程吗 据我读到 对话是这样的 客户端连接到 servlet Servlet
  • 如何通过线程限制核心数量

    下面发布的代码启动一个线程 在我的 macbookpro 上启动 4 个核心 有没有办法限制线程应使用多少个核心 import threading import logging logging basicConfig level loggi
  • 如何制作灰色的 HTML 表单?

    我想要一组 HTML 文本
  • 访问 NLog 中的内存目标

    假设我的 nlog config 中有以下内容 取自http nlog project org documentation v2 0 1 html T NLog Targets MemoryTarget htm http nlog proj
  • 将均衡器附加到 Android 全局音频输出

    我计划为 Android 制作一个均衡器应用程序 我在均衡器类文档中注意到here http developer android com reference android media audiofx Equalizer html 它说 注
  • 在浏览器客户端生成 rsa 密钥对

    我对这种编程不是很专家 我知道有几个类似的问题 但有人准确地回答了我需要的问题 我的团队 和我 正在开发公钥基础设施 我们陷入了密钥生成 在客户端 但我们发现有关它的文档很少 我们知道有以下选择 keygen 标签 gt 生成 SPKAC
  • 无法在 IntelliJ 中选择类作为主类

    我在 IntelliJ 中有一个 Java 项目 我刚刚在嵌套文件夹层次结构中添加了一堆文件 其中许多文件都是测试并包含主要方法 因此我应该能够运行它们 但是我不知道如何做到这一点 我是 IntelliJ 的新手 以前的文件已显示在项目层次
  • HTML 和 CSS 背景图像未显示

    我已经仔细检查了我的 URL 和文件名 但我似乎无法显示图像 为什么会这样呢 这是我的代码 注意 p 在body标签里面 我没有添加完整的代码 我只添加了head和具体问题 p p class guarantee Our guarantee
  • 使用 javascript 和 PHP 发送电子邮件的简单方法 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我需要能够从用户那里获取电子邮件地址
  • 你能以任何方式在 Git 中获得重复的哈希值吗?这有什么影响

    我的观点是 应该有可能获得重复的 git 哈希 因为哈希代码是唯一性的压缩表示 因此会有一些步骤序列产生相同的哈希代码 更重要的是 应该有一系列步骤 其中提交不同的更改但产生相同的哈希码 例如 在同一台计算机上克隆同一存储库两次 在不同的存