Поврежденные файлы в Мерзавце

Я недавно удалил некоторые папки от своего мерзавца repos история с помощью следующей команды:

git filter-branch --index-filter 'git rm -r --cached var' -- --all

К сожалению, я не могу больше вытягивать от этого repos, Это - ошибочный набор, который я получаю:

git pull
remote: Counting objects: 3953, done.
remote: Compressing objects: 100% (2810/2810), done.
error: garbage at end of loose object '4b391c2cc93ccc8d2f7262335629a7f81d6bcbe0'
fatal: object 4b391c2cc93ccc8d2f7262335629a7f81d6bcbe0 is corrupted
fatal: index-pack failed
8
задан 24.05.2015, 23:33

1 ответ

Некоторая добрая душа записала сценарий, чтобы сделать это автоматически (и более тщательно), но процесс к восстановлению - в основном это:

  1. Исследуйте файл, который сообщает о мусоре с hexdump.

    $ hexdump .git/objects/4b391c2cc93ccc8d2f7262335629a7f81d6bcbe0
    

    Вы ищете часть файла, где существует огромный промежуток нулей. Если существует несколько таких промежутков, мне везло (N = 2) при рассмотрении просто первого гигантского набора нулей, даже когда они включали маленькие выполнения ненулевых данных. Это - "мусор", на который жалуется мерзавец.

    ...
    0000500 0532 0302 0000 0000 0000 0000 0000 0000    # <-- Beginning here...
    0000510 0000 0000 0000 0000 0000 0000 0000 0000
    *
    0001000             # ... almost 3kb of zeros.
    

    Можно определить от этого реальный размер объекта. Здесь, это был бы 0x504 или 1 284 байта.

  2. Сделайте резервную копию объекта. В случае, если Вы выбираете неправильный набор нулей, можно попробовать еще раз с другим набором.

    $ cp .git/objects/4b391c2cc93ccc8d2f7262335629a7f81d6bcbe0 ~/old_4b391c2cc93ccc8d2f7262335629a7f81d6bcbe0
    
  3. Усеките файл к его соответствующей длине.

    $ truncate -s 1284 .git/objects/4b391c2cc93ccc8d2f7262335629a7f81d6bcbe0
    

Поврежденный объект должен теперь быть зафиксирован. Принятие его было единственным, клонируются/продвигают/вытягивают, репозиторий должен теперь работать как ожидалось.

Цитируя мои источники, я полагаю, что испытал ту же проблему, но в моем случае с помощью Ubuntu 10.4 (2.6.32-23-универсальное ядро). В этом случае это - ошибка файловой системы, которая еще не была разыскана. Существует нерешенный вопрос о ecryptfs на этом предмете и также связанном потоке Usenet. По пути к решению, я нашел удобный ответ и сводку на StackOverflow. Связанная статья была очень интересна, хотя я в конечном счете пошел другим путем.

7
ответ дан 07.12.2019, 14:13

Теги

Похожие вопросы