`
chimer
  • 浏览: 36743 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

记一次git_gerrit文件破损错误排查

 
阅读更多
某一天拉代码发生了一次错误

Checking object directories: 100% (256/256), done.
error: ./objects/pack/pack-e434848729a1a52d7ec5cd39ade4fac7f7aa5595.pack SHA1 checksum mismatch
error: index CRC mismatch for object 582bda543520dcbde0f6baaae86d5f9b626787f0 from ./objects/pack/pack-e434848729a1a52d7ec5cd39ade4fac7f7aa5595.pack at offset 57938241
error: inflate: data stream error (invalid distances set)

常规思路谷歌一下是否有类似解决方法,搜到一篇很有用的文章:
http://web.mit.edu/jhawk/mnt/spo/git/git-doc/howto/recover-corrupted-object-harder.html
有一个对应的译文,不过译文有点绕口,不知道是否机器翻译人工简单修订了下
http://blog.jobbole.com/50108/

大致思路是采用穷举改变错误地方的每一个字节,让其能够被解压缩,可惜这个玩意试验后不适用我的情况,因为那个作者只是错了一个字节,而我最后修复后发现错了9个字节并且散落在不同位置。

中间绕过很多弯路,把git源码拉下来修改解包源码然后编译让其调过错误的那个块,但最后我的情况修复可以绕过很多弯路处理,那就是是我错误的 sha1 object 可以完整的打印出来。

git cat-file -p 582bda543520dcbde0f6baaae86d5f9b626787f0 
可以得到这个对象,然后一切就简单了,把这个文件cat出来,放到一个新的git仓库,然后add进去并gc, 从 pack 文件把打包的 offset 用 dd 命令down下来, 原样不动的覆盖掉错误的地方就解决了。

目前不得其解的是为什么错了的还能正确 cat 出来,如果cat 都出不来,那就只能用采用解包方式来处理这个了。

git这么强大,应该有相关low level命令可以处理而不用涉及改源码,目前还没研究真正的原因,等什么时候空了再去查一下根本原因是什么,暂时记录下来供参考。
分享到:
评论

相关推荐

    CentOS下搭建Git_Gerrit_Jenkins版本控制系统

    CentOS下搭建Git_Gerrit_Jenkins版本控制系统

    windows搭建git审核平台.zip_Gerrit _gerrit windows_windows+gerrit

    在本文中,我们将深入探讨如何在Windows环境下搭建一个基于Git的代码审核平台——Gerrit。Gerrit是一个开源的代码审查系统,它允许开发者提交代码,并通过一个交互式的Web界面进行审查,确保代码的质量和一致性。...

    Git_Extract.zip

    "Git_Extract.zip" 是一个工具包,专为处理Git文件泄露情况设计,它可以帮助安全专家和开发人员从Web目录中恢复或下载那些可能未被删除的隐藏`.git`目录。这个基于Python3的工具对于理解和防止Web安全攻击至关重要。...

    progit_v2.1.15_git_V2_

    《ProGit_v2.1.15_git_V2_》是一部深入探讨Git版本控制系统的重要著作。Git是一款分布式版本控制系统,它的出现彻底改变了开发者们管理代码的方式。本资源提供了Git的最新版本V2的相关知识,旨在帮助用户理解并熟练...

    git_command.zip_git_git command_git commd_git commond_git命令

    考虑到压缩包内的唯一文件是“git_command.txt”,我们可以推测这可能是一个文本文件,列出了常见的Git操作。 Git的基础操作包括初始化仓库、添加文件、提交更改和查看历史。以下是一些重要的Git命令: 1. **初始...

    GIT+Gerrit+Jenkins基础操作

    GIT+Gerrit+Jenkins基础操作 

    Python库 | git_gerrit-1.8.2.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:git_gerrit-1.8.2.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    git+repo+gerrit代码服务器搭建

    本文将指导读者从头开始搭建一个完整的代码评审服务器,使用 Git、Repo 和 Gerrit 等工具。本篇文章将详细介绍每个步骤的配置过程,旨在帮助读者快速搭建一个功能完善的代码服务器。 代码服务器搭建步骤 名词解释 ...

    git+gerrit配置文件和常用命令

    git+gerrit配置文件和常用命令,完整的gerrit配置和提交代码管理工具描述

    PyPI 官网下载 | git_export_hardlink-0.1.0.tar.gz

    标题中的"PyPI 官网下载 | git_export_hardlink-0.1.0.tar.gz"表明我们正在讨论的是一个在Python Package Index (PyPI)上发布的软件包,名为`git_export_hardlink`,其版本号为0.1.0,打包格式为tar.gz。PyPI是...

    Python库 | git_gerrit-1.1.0.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:git_gerrit-1.1.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    搭建自己的git gitweb gerrit服务器

    自己从零开始搭建git + gitweb + gerrit服务器 软硬件环境 物理机:Windows10 64位 VMware版本:VMware Workstation 12 Ubuntu版本:ubuntu-14.04-server-amd64.iso

    git+gerrit+jenkins+sonar持续集成环境大家资料

    git+gerrit+jenkins+sonar持续集成环境大家资料,具体搭建步骤请参考本人博客。 里面还有一些插件,方便大家少走弯路

    Git/Gerrit Manual

    ### Git/Gerrit 手册知识点详述 #### 一、Git 介绍 - **分布式特性**:Git 是一种分布式版本控制系统,这意味着每个开发者的工作副本实际上就是一个完整的仓库。这种设计方式消除了传统的客户端/服务器模式,使得...

    Python库 | git_gopher-0.4.5.tar.gz

    本文将聚焦于一个名为“git_gopher”的Python库,通过分析其0.4.5版本的源代码压缩包,深入探讨这个库的功能、用途以及使用方法。 “git_gopher”是一个专门针对Git版本控制系统的Python库,它提供了一系列工具和...

    eclipse GIT_4.6.1离线插件包

    eclipse GIT_4.6.1离线插件包 下载后解压到eclipse安装目录,重启Eclipse即可。

    git+gerrit+repo简介及评审流程

    文档主要介绍git gerrit repo的基本功能,及搭建流程和代码评审流程

    git_sch_pcb

    `______Git_Reset_Hard.bat`文件很可能是一个执行Git重置操作的脚本,特别是使用了“hard”模式。在Git中,`git reset --hard`命令会将工作目录与HEAD(当前分支的最新提交)同步,丢弃所有未提交的本地修改。这在...

    Python库 | git_pw-1.6.0-py2.py3-none-any.whl

    今天我们将聚焦于一个名为`git_pw`的Python库,该库主要用于与Git相关的操作,尤其对于后端开发者而言,它提供了极大的便利。我们将会深入探讨`git_pw`的功能、安装、使用方法以及其在实际项目中的应用。 `git_pw`...

    Git_2.12_64

    Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。[1] Git的读音为/gɪt/。 Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。[2] Git 是 ...

Global site tag (gtag.js) - Google Analytics