我遇到了硬盘故障导致Git存储库的某些文件损坏.运行时,git fsck --full我得到以下输出:
error: .git/objects/pack/pack-6863e0a0e4b4ded6090fac5d12eba6ca7346b19c.pack SHA1 checksum mismatch
error: index CRC mismatch for object 6c8cae4994b5ec7891ccb1527d30634997a978ee from .git/objects/pack/pack-6863e0a0e4b4ded6090fac5d12eba6ca7346b19c.pack at offset 97824129
error: inflate: data stream error (invalid code lengths set)
error: cannot unpack 6c8cae4994b5ec7891ccb1527d30634997a978ee from .git/objects/pack/pack-6863e0a0e4b4ded6090fac5d12eba6ca7346b19c.pack at offset 97824129
error: inflate: data stream error (invalid stored block lengths)
error: failed to read object 0dcf6723cc69cc7f91d4a7432d0f1a1f05e77eaa at offset 276988017 from .git/objects/pack/pack-6863e0a0e4b4ded6090fac5d12eba6ca7346b19c.pack
fatal: object 0dcf6723cc69cc7f91d4a7432d0f1a1f05e77eaa is corrupted
Run Code Online (Sandbox Code Playgroud)
我有存储库的备份,但包含包文件的唯一备份已经损坏了.所以我认为我必须找到一种方法从不同的备份中检索单个对象,并以某种方式指示Git生成一个只有正确对象的新包.
你能否告诉我如何修复我的存储库?
有极少数的Q&A的上的git grafts对replace.搜索[git] + grafts + replace只发现了两个与5. what-are-git-info-grafts-for和git-what-a-a-graftcommit-or-a-graft-id相关的两个.git.wiki.kernel.org:GraftPoint上还有一个注释
被移植现在完全取代由replace和filter-branch,或者他们仍然需要一些特殊的情况(和向后兼容)?
一般来说,它们如何不同(例如哪些在回购之间运输),它们通常是如何相同的?我已经看到Linus似乎并不关心目前在关于提交代数的讨论(最大父母回到任何根种类)的问题"移植已经不可靠了."
编辑:找到更多信息.
搜索www.kernel.org/pub/software/scm/git/docs graft仅找到3个结果:
稍微宽泛的搜索发现RelNotes/1.6.5.txt包含:
- refs/replace/hierarchy被设计为可用作"移植"机制的替代,其附加优势是它可以跨存储库传输.
不幸的是,gitrepository-layout(5)还没有更新refs/replace/repository布局信息(和注释),也没有任何信息/移植的弃用说明.
这更接近支持我的想法,但我欢迎任何确认或澄清.
由于电源问题,我的Git存储库在经过几次硬重启后损坏了,现在我无法修复它(我在最后一次电源故障时暂停了一些文件):
$ git status
fatal: failed to read object 3d18855708b0f127d40c13c679559d7679228b69: Invalid argument
$ git fsck
fatal: failed to read object 24377c609184c192f3f3c1733bac7115c1080758: Invalid argument
$ git branch -a
(...works, lists branches...)
$ git checkout someotherbranch
fatal: failed to read object 3d18855708b0f127d40c13c679559d7679228b69: Invalid argument
$ git log
fatal: failed to read object 3d18855708b0f127d40c13c679559d7679228b69: Invalid argument
$ git log someotherbranch
(...works, shows commits...)
Run Code Online (Sandbox Code Playgroud)
所以,正如你所看到的,我当前的分支已经搞砸了,我似乎无法修复它.我可以尝试修复此问题?