Я недавно удалил некоторые папки от своего мерзавца 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
Некоторая добрая душа записала сценарий, чтобы сделать это автоматически (и более тщательно), но процесс к восстановлению - в основном это:
Исследуйте файл, который сообщает о мусоре с 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 байта.
Сделайте резервную копию объекта. В случае, если Вы выбираете неправильный набор нулей, можно попробовать еще раз с другим набором.
$ cp .git/objects/4b391c2cc93ccc8d2f7262335629a7f81d6bcbe0 ~/old_4b391c2cc93ccc8d2f7262335629a7f81d6bcbe0
Усеките файл к его соответствующей длине.
$ truncate -s 1284 .git/objects/4b391c2cc93ccc8d2f7262335629a7f81d6bcbe0
Поврежденный объект должен теперь быть зафиксирован. Принятие его было единственным, клонируются/продвигают/вытягивают, репозиторий должен теперь работать как ожидалось.
Цитируя мои источники, я полагаю, что испытал ту же проблему, но в моем случае с помощью Ubuntu 10.4 (2.6.32-23-универсальное ядро). В этом случае это - ошибка файловой системы, которая еще не была разыскана. Существует нерешенный вопрос о ecryptfs на этом предмете и также связанном потоке Usenet. По пути к решению, я нашел удобный ответ и сводку на StackOverflow. Связанная статья была очень интересна, хотя я в конечном счете пошел другим путем.