`
chimer
  • 浏览: 36680 次
  • 性别: 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基础操作 

    git服务器安装指南V0.1.pdf_Gerrit_

    Git服务器安装指南主要聚焦于如何在本地环境中搭建一个用于版本控制的Git服务器,并且结合了Gerrit这一代码审查工具的配置与使用。Gerrit是Google开发的一个开源项目,它提供了一个强大的代码审查和协作平台,适用于...

    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 是一种分布式版本控制系统,这意味着每个开发者的工作副本实际上就是一个完整的仓库。这种设计方式消除了传统的客户端/服务器模式,使得...

    eclipse GIT_4.6.1离线插件包

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

    Python库 | git_gopher-0.4.5.tar.gz

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

    git_2.14_windows_64_exe文件

    `git_2.14_windows_64_exe文件`是指Git的2.14版本的64位Windows安装程序,适用于运行在Windows操作系统上的64位环境。这个文件通常是一个可执行的安装包,用户可以通过它来在Windows系统上安装Git。 Git的核心特性...

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

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

    git_sch_pcb

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

Global site tag (gtag.js) - Google Analytics