草庐IT

Github Repo 损坏 - Sha1 冲突

coder 2023-06-24 原文

昨天,我团队的一个 checkin 损坏了我们的 github 存储库。在github上,他们显示了这个错误:

$ git fsck
error: sha1 mismatch 87859f196ec9266badac7b2b03e3397e398cdb18

error: 87859f196ec9266badac7b2b03e3397e398cdb18: object corrupt or missing
missing blob 87859f196ec9266badac7b2b03e3397e398cdb18

当我试图 pull 到另一台机器上时,我得到了这个:
Hyperion:Convoy-clone saalon$ git fsck
warning in tree 5b7ff7b4ac7039c56e04fc91d0bf1ce5f6b80a67: contains zero-padded file modes
warning in tree 5db54a0cdcd5775c09365c19c061aff729579209: contains zero-padded file modes
broken link from    tree 6697c12387f8909cfe7250e9d5854fd6713d25c1
              to    blob 87859f196ec9266badac7b2b03e3397e398cdb18
dangling tree 144becf61ae14cec34b6af1bd8a0cf4f00d346d1
missing blob 87859f196ec9266badac7b2b03e3397e398cdb18

(我在有问题的机器和我 pull 到的第二台机器上都收到零填充文件警告。我只在第二台机器上收到断开的链接错误)。

我将 blob 追踪到了问题所在的特定文件,但是在完成 Git FAQ 修复断开链接错误的过程后,我没有走运。

我浏览了 Github 的文档,找到了从 github 中删除 master repo 并从有问题的机器重新推送的过程。我试过了,但是当我去重新推送主分支时,出现以下错误:
fatal: SHA1 COLLISION FOUND WITH 87859f196ec9266badac7b2b03e3397e398cdb18 !
error: unpack failed: index-pack abnormal exit

我有一个 Github 的公开票,但他们需要永远回应。知道可能是什么问题吗? Github 是否有他们需要解决的问题,或者我可以做些什么来解决这个问题?

最佳答案

经过与 GitHub 的一些来回(以及来自 ssmir 的一些故障排除帮助),这个问题分为我需要解决的问题和 Github 需要解决的问题。

我最后需要解决的是:

Hyperion:Convoy-clone saalon$ git fsck
warning in tree 5b7ff7b4ac7039c56e04fc91d0bf1ce5f6b80a67: contains zero-padded file modes
warning in tree 5db54a0cdcd5775c09365c19c061aff729579209: contains zero-padded file modes
broken link from    tree 6697c12387f8909cfe7250e9d5854fd6713d25c1
              to    blob 87859f196ec9266badac7b2b03e3397e398cdb18
dangling tree 144becf61ae14cec34b6af1bd8a0cf4f00d346d1
missing blob 87859f196ec9266badac7b2b03e3397e398cdb18

如果您注意到,从树到 blob 的链接已断开。这就是说有一个文件夹应该有一个文件,但实际上里面没有文件。有人向他们的本地存储库添加了一个文件并将其推送,但该文件本身并没有出现在远程存储库中。现在每次有人自己 pull 下 repo 时,他们都会得到同样损坏的 git 文件系统链接。

使用说明 here很好地解释如果遇到问题该怎么办,但在实际危机中,我发现描述有点缺乏上下文。它给出了一个清晰的步骤列表,但并没有很好地说明原因——至少,对于对 Git 还是有点陌生​​的人来说不是这样。

基本上,您需要做的是找出丢失的 blob 是什么文件,追踪上次检查它的计算机并开始处理他们的本地存储库。他们的计算机既有文件的 SHA1 链接,也有文件本身的内容。其他人都有一堆破烂。

因此,首先,我们需要找出该树中的 blob/文件。为此,您可以使用 git ls-tree。
git ls-tree 6697c12387f8909cfe7250e9d5854fd6713d25c1

就我而言,它只列出了一个文件:已损坏的文件。在您的情况下,它可能会提供完整的文件列表,在这种情况下,您需要做的是将 blob/文件的 SHA1 哈希与断开链接错误中提到的哈希匹配。就我而言,是这样的:
100644 blob 87859f196ec9266badac7b2b03e3397e398cdb18    short_description.html

请注意,它没有为您提供文件实际所在的目录。这有点令人沮丧,但您可以通过一些侦探工作找到它。该文件可能具有唯一名称,在这种情况下,您只需查找文件名即可。或者,您可以查看提交历史记录,查看放置名为 short_description.html 的文件的时间和位置。

这是 GitFaq 不完全清楚的部分。他们说要重新创建文件,然后运行以下命令:
git hash-object -w db/content/page_parts/venues/86/short_description.html 

但那是在做什么?

基本上,当您运行 git hash-object 时,会返回该文件的 sha1 哈希值。并且(这是重要的部分)它从文件中创建一个 blob,而 blob 正是我们所缺少的。不过,这是它不清楚的部分:为了使其正常工作,文件需要与最初导致问题的文件完全匹配。换句话说,如果该 short_description.html 文件中包含内容,则不能只创建一个空白文件并运行 hash-object。如果这样做,blob 的 sha1 哈希将与丢失的 git 不匹配,并且该断开的链接仍将断开。

这就是为什么你需要在违规机器的 repo 中。其他人都有链接,但没有文件,也没有 blob。有问题的机器(希望)仍然有原始文件。在我的情况下,他们没有原始文件(在我的困惑中,它被无意中删除了),但是当我在他们的盒子上查看他们的提交历史时,差异包含已提交但从未提交的文件内容到了github。我复制了它,重新创建了文件并运行了哈希对象。下次我运行 git fsck 时,断开的链接消失了。

一个注意事项:从技术上讲,只要您可以重新创建丢失的文件,就可以在其他人的存储库上修复此问题。就我而言,我实际上是在有问题的机器上创建了文件,但是它通过电子邮件发送给我并在不同系统上的干净存储库中修复了问题。重要的是完全重新创建文件,以便它生成与 repo 缺少的相同的 sha1 哈希。

至于我在尝试推送到 github 时遇到的 SHA1 冲突问题?这个丑陋的吸盘?
fatal: SHA1 COLLISION FOUND WITH 87859f196ec9266badac7b2b03e3397e398cdb18 !
error: unpack failed: index-pack abnormal exit

这是 github 方面的一个问题,他们需要解决。

关于Github Repo 损坏 - Sha1 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4864740/

有关Github Repo 损坏 - Sha1 冲突的更多相关文章

  1. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  2. git使用常见问题(提交代码,合并冲突) - 2

    文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g

  3. ruby-on-rails - Assets 管道损坏 : Not compiling on the fly css and js files - 2

    我开始了一个新的Rails3.2.5项目,Assets管道不再工作了。CSS和Javascript文件不再编译。这是尝试生成Assets时日志的输出:StartedGET"/assets/application.css?body=1"for127.0.0.1at2012-06-1623:59:11-0700Servedasset/application.css-200OK(0ms)[2012-06-1623:59:11]ERRORNoMethodError:undefinedmethod`each'fornil:NilClass/Users/greg/.rbenv/versions/1

  4. ruby - mixin方法名冲突时如何选择调用方法? - 2

    当你在类中包含方法名冲突的模块时,它会使用类定义的方法。有没有办法选择我想运行的?moduleBdefself.hello"helloB"endendclassAincludeBdefself.hello"helloA"endendA.hello#=>thisprints"helloA",whatifIwant"helloB"? 最佳答案 Ben,当你在Ruby中调用一个方法(比如hello)时,会发生以下情况:如果接收者的特征类有一个名为hello的方法,它将被调用。如果不是:如果接收者的类有一个名为hello的实例方法,它将被调

  5. ruby - 无法激活 susy-2.1.1,因为 sass-3.2.17 与 sass 冲突 (~> 3.3.0) - 2

    我已经安装了最新版本的compass、sass和susy。但我仍然收到此错误:Unabletoactivatesusy-2.1.1,becausesass-3.2.17conflictswithsass(~>3.3.0)有人知道这个Ruby是如何工作的吗?这是我安装的gem的列表:***LOCALGEMS***CFPropertyList(2.2.0)chunky_png(1.3.0)compass(0.12.4)compass-core(1.0.0.alpha.19)compass-import-once(1.0.4)compass-rails(1.1.3)fssm(0.2.10)l

  6. ruby - Ruby gems 的问题(损坏?)试图让指南针在 npm 中工作 - 2

    我不是Ruby专家,但想弄清楚发生了什么,因为我试图让指南针在节点应用程序中工作,但我的Ruby似乎坏了。打字:ruby--version让我:ruby2.1.1p76(2014-02-24revision45161)[x86_64-darwin13.0]我安装了Homebrew,之前遇到过Ruby版本的问题,但它似乎已安装并且可以正常工作。但是,当我使用gem输入请求时,出现此错误:$gem-hErrorloadingRubyGemsplugin"/Users/user_dir/.rvm/gems/ruby-2.1.1@global/gems/executable-hooks-1.3

  7. ruby - RVM screen 内部损坏 - 2

    我正在使用screen,甚至在rvm1.9.2之后并且有一个合适的.rvmrc我的服务器将仍然使用jruby。我的.screenrc包含shell#{SHELL}rvm信息显示jruby。好像rvm1.9.2没有任何效果,但它在screen外工作正常。 最佳答案 好的,我找到了solution.创建一个.screenrc文件并将此代码段放入其中:shell-$SHELLofficialinstructions省略破折号。 关于ruby-RVMscreen内部损坏,我们在StackOver

  8. ruby-on-rails - rb_gc() 上的跨线程冲突 - 2

    我正在处理的代码库最近从Ruby1.9.2升级到Ruby1.9.3,从Rails3.1升级到Rails3.2.2。因为我使用的是RVM,所以我只是简单地执行了rvminstall1.9.3,我原以为这是所有必要的。当我运行时railss我得到了错误[BUG]cross-threadviolationonrb_gc()我找到了许多与此问题相关的链接。有oneonStackOverflow,但它并没有真正给出答案。最有希望的答案是ontheRVMsite:IneverycaseofthisIhaveseenthusfarithasalwaysendedupbeingthatarubygem

  9. ruby - 我们如何访问/操作与 byebug 保留关键字冲突的变量名? - 2

    我们如何访问那些与byebug保留名称冲突的变量名称?(byebug)varlocalh={"hierarchyId"=>"59f0b029e4b037ef11a055f7","level"=>2,...self=(byebug)我想访问变量“h”但键入h会显示“byebug的帮助对话框”(byebug)hbreak--Setsbreakpointsinthesourcecodecatch--Handlesexceptioncatchpointscondition--Setsconditionsonbreakpointscontinue--Runsuntilprogramends,hi

  10. ruby - RVM 系统范围的安装脚本 url 已损坏——什么是替换? - 2

    我的RVM系统级安装脚本损坏了,无论是LinodeStackScripts还是Chef-soloRecipes的形式。根据RVM网站上的说明,我的脚本以root身份执行以下命令以在系统范围内安装RVM:echo"InstallingRVMsystem-wide">>$logfilebash>/etc/profile上面的关键部分是urlhttp://bit.ly/rvm-install-system-wide。截至今天,2011年3月24日,此网址不再提供服务。它会导致GitHub404错误。RVM网站上的以下URL用于包含系统范围安装的说明:http://rvm.beginrescu

随机推荐