性感的香蕉 · 江苏省财政厅 市县动态 ...· 4 月前 · |
道上混的消炎药 · 首次盾构始发!广佛环线“最后一块拼图”动了 ...· 7 月前 · |
年轻有为的墨镜 · R1SE献唱《熊出没·狂野大陆》插曲_北京日 ...· 1 年前 · |
苦闷的领带 · 狐狸的夏天电视剧剧情简介【第1集到第55集大 ...· 1 年前 · |
聪明伶俐的煎鸡蛋 · 漫威:雷神的斧子杀死过两位宇宙天神组!_漫画· 1 年前 · |
我有一个硬盘故障,导致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
我有存储库的备份,但包含包文件的唯一备份已经损坏。因此,我认为我必须找到一种方法,从不同的备份中检索单个对象,并以某种方式指示Git生成一个仅包含正确对象的新包。
你能给我一些提示如何修复我的存储库吗?
发布于 2009-04-29 13:09:55
在以前的一些备份中,您的坏对象可能已经打包到不同的文件中,也可能是松散的对象。因此,您的对象可能会被恢复。
你的数据库中似乎有一些坏的对象。所以你可以用手工的方式来做。
由于
git hash-object
,
git mktree
和
git commit-tree
不写入对象,因为它们可以在包中找到,然后开始这样做:
mv .git/objects/pack/* <somewhere>
for i in <somewhere>/*.pack; do
git unpack-objects -r < $i
rm <somewhere>/*
(您的包从存储库中移出,并再次在其中解包;现在只有好的对象在数据库中)
您可以执行以下操作:
git cat-file -t 6c8cae4994b5ec7891ccb1527d30634997a978ee
并检查对象的类型。
如果类型是blob:从以前的备份中检索文件的内容(使用
git show
、
git cat-file
或
git unpack-file
;然后可以使用
git hash-object -w
重写当前存储库中的对象。
如果类型是树:您可以使用
git ls-tree
从以前的备份中恢复树;然后使用
git mktree
将其重新写入当前存储库中。
如果类型为commit:与
git show
、
git cat-file
和
git commit-tree
相同。
当然,在开始此过程之前,我会备份您的原始工作副本。
另外,请看一下 How to Recover Corrupted Blob Object 。
发布于 2009-05-04 13:46:24
Banengusk 让我走上了正确的道路。为了进一步参考,我想发布我为修复存储库损坏而采取的步骤。我很幸运地找到了所有需要的对象,无论是在较旧的包中还是在存储库备份中。
# Unpack last non-corrupted pack
$ mv .git/objects/pack .git/objects/pack.old
$ git unpack-objects -r < .git/objects/pack.old/pack-012066c998b2d171913aeb5bf0719fd4655fa7d0.pack
$ git log
fatal: bad object HEAD
$ cat .git/HEAD
ref: refs/heads/master
$ ls .git/refs/heads/
$ cat .git/packed-refs
# pack-refs with: peeled
aa268a069add6d71e162c4e2455c1b690079c8c1 refs/heads/master
$ git fsck --full
error: HEAD: invalid sha1 pointer aa268a069add6d71e162c4e2455c1b690079c8c1
error: refs/heads/master does not point to a valid object!
missing blob 75405ef0e6f66e48c1ff836786ff110efa33a919
missing blob 27c4611ffbc3c32712a395910a96052a3de67c9b
dangling tree 30473f109d87f4bcde612a2b9a204c3e322cb0dc
# Copy HEAD object from backup of repository
$ cp repobackup/.git/objects/aa/268a069add6d71e162c4e2455c1b690079c8c1 .git/objects/aa
# Now copy all missing objects from backup of repository and run "git fsck --full" afterwards
# Repeat until git fsck --full only reports dangling objects
# Now garbage collect repo
$ git gc
warning: reflog of 'HEAD' references pruned commits
warning: reflog of 'refs/heads/master' references pruned commits
Counting objects: 3992, done.
Delta compression using 2 threads.
fatal: object bf1c4953c0ea4a045bf0975a916b53d247e7ca94 inconsistent object length (6093 vs 415232)
error: failed to run repack
# Check reflogs...
$ git reflog
# ...then clean
$ git reflog expire --expire=0 --all
# Now garbage collect again
$ git gc
Counting objects: 3992, done.
聪明伶俐的煎鸡蛋 · 漫威:雷神的斧子杀死过两位宇宙天神组!_漫画 1 年前 |