亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何恢復因硬盤故障而損壞的Git對象?

如何恢復因硬盤故障而損壞的Git對象?

Git
30秒到達戰場 2019-08-12 14:37:06
如何恢復因硬盤故障而損壞的Git對象?我遇到了硬盤故障導致Git存儲庫的某些文件損壞。運行時,git fsck --full我得到以下輸出:error: .git/objects/pack/pack-6863e0a0e4b4ded6090fac5d12eba6ca7346b19c.pack SHA1 checksum mismatcherror: index CRC mismatch for object 6c8cae4994b5ec7891ccb1527d30634997a978ee from .git/objects/pack/pack-6863e0a0e4b4ded6090fac5d12eba6ca7346b19c.pack at offset 97824129error: inflate: data stream error (invalid code lengths set)error: cannot unpack 6c8cae4994b5ec7891ccb1527d30634997a978ee from .git/objects/pack/pack-6863e0a0e4b4ded6090fac5d12eba6ca7346b19c.pack at offset 97824129error: inflate: data stream error (invalid stored block lengths)error: failed to read object 0dcf6723cc69cc7f91d4a7432d0f1a1f05e77eaa at offset 276988017 from .git/objects/pack/pack-6863e0a0e4b4ded6090fac5d12eba6ca7346b19c.packfatal: object 0dcf6723cc69cc7f91d4a7432d0f1a1f05e77eaa is corrupted我有存儲庫的備份,但包含包文件的唯一備份已經損壞了。所以我認為我必須找到一種方法從不同的備份中檢索單個對象,并以某種方式指示Git生成一個只有正確對象的新包。你能否告訴我如何修復我的存儲庫?
查看完整描述

3 回答

?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

在以前的一些備份中,您的壞對象可能已經打包在不同的文件中,或者可能是松散的對象。所以你的對象可能會被恢復。

看來你的數據庫中有一些壞對象。所以你可以用手動的方式做到這一點。

因為git hash-objectgit mktree并且git commit-tree因為它們在包中發現不寫的對象,然后開始做這樣的:

mv .git/objects/pack/* <somewhere>for i in <somewhere>/*.pack; do
  git unpack-objects -r < $idonerm <somewhere>/*

(您的包將從存儲庫中移出,并再次在其中解壓縮;只有好的對象現在在數據庫中)

你可以做:

git cat-file -t 6c8cae4994b5ec7891ccb1527d30634997a978ee

并檢查對象的類型。

如果類型是blob:從以前的備份中檢索文件的內容(使用git showgit cat-filegit unpack-file;然后您可以git hash-object -w重寫當前存儲庫中的對象。

如果類型是樹:您可以使用git ls-tree從以前的備份恢復樹; 然后git mktree在當前的存儲庫中再次編寫它。

如果類型是commit:與git show,相同,git cat-filegit commit-tree。

當然,在開始此過程之前,我會備份您的原始工作副本。

另外,請看一下如何恢復損壞的Blob對象。


查看完整回答
反對 回復 2019-08-12
  • 3 回答
  • 0 關注
  • 2249 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號