неизвестный тип объекта 0 по смещению - все зеркала репо повреждены, что предотвращает фильтрацию ветки подкаталога-фильтра

1) Описание проблемы

У меня есть несколько файлов пакетов, в которых указано unknown object type 0 at offset, и, в отличие от 99% сообщений в Интернете, это не локальная проблема, а появляется как в удаленных, так и в клонированных репозиториях.

2) Что я хочу сделать

Как мне просто удалить эти недействительные ссылки, чтобы мне не мешали выполнять другие операции с репозиторием? В конечном счете, я хочу запустить команду git filter-branch --subdirectory, чтобы разделить репозиторий 9.2G на подмодули, но он задыхается от этих недопустимых файлов пакета (примечание: индексный фильтр работает).

3) Полное сообщение об ошибке

$ git filter-branch --subdirectory-filter mydir HEAD

error: unknown object type 0 at offset 78171701 in /media/me/unmirrored/trash/git_filter_subdir_attempt.2020-06-21/me.git.cloned/.git/objects/pack/pack-35b37571b163f30d71a98002a7f6a30aaeeadbad.pack
fatal: packed object a30f803926d5e369b0bda4982dba89fa7127cabe (stored in /media/me/unmirrored/trash/git_filter_subdir_attempt.2020-06-21/me.git.cloned/.git/objects/pack/pack-35b37571b163f30d71a98002a7f6a30aaeeadbad.pack) is corrupt
Could not get the commits

Я также разместил вывод git fsck --full здесь: https://pastebin.com/WCnArrCh

4) Что я пробовал

принести снова

В большинстве решений предполагается, что у вас есть неповрежденная удаленная копия. Но все мои копии повреждены.

Удалить ссылку

(Я добавлю ответ о неудачном исходе после воспроизведения)

git update-ref -d abc123

(https://git.wiki.kernel.org/index.php/GitFaq#salvage)

git-ремонт

(Я добавлю ответ о неудачном исходе после воспроизведения)

git-repair
git-repair --force

(http://manpages.ubuntu.com/manpages/bionic/man1/git-repair.1.html)


person Sridhar Sarnobat    schedule 24.06.2020    source источник
comment
Где находится ваш пульт? Вы можете скопировать (фактическая копия файла: cp -r или scp -r или...) удаленный репозиторий на свой локальный компьютер?   -  person LeGEC    schedule 24.06.2020
comment
Я уже пробовал это. Это мой личный репозиторий git, и сервер тоже поврежден.   -  person Sridhar Sarnobat    schedule 24.06.2020
comment
Затем вы должны запустить действия по очистке пустого репозитория. Если можете: запустите их на копии.   -  person LeGEC    schedule 24.06.2020
comment
git prune и git gc выдает ту же ошибку, что и выше.   -  person Sridhar Sarnobat    schedule 25.06.2020


Ответы (1)


О.. много попыток.. Мы можем попробовать это:

Первая попытка:

Воссоздать индекс:

git co -f HEAD   # git checkout
rm .git/index
git reset

Проверить и восстановить файловую систему Git

git fsck --full --no-dangling 

если сначала не получится, продолжайте.

Вторая попытка:

Это очень резко, и вы потеряли историю журнала. Сохранит только последнюю версию в основной ветке.

  1. Найдите функционал последней версии; (например: commit0 1e89694)
  2. Создайте новую ветку для восстановления; git branch commit0 1e89694;
  3. Нажмите его; git push --all
  4. Создать рабочий каталог для восстановления; cd /tmp; git clone --depth 1 [email protected]:youproject/project.git -b commit0
  5. Отсюда критический чекпойнт.
  6. Зайдите в рабочий каталог с проблемой.
  7. Удалить каталог .git
  8. скопировать все содержимое в восстановление рабочего каталога;rsync -vaRCHz . /tmp/project
  9. git add .; git ci -m "Recover $(date)"; git push --all; git merge --ff master # ci: зафиксировать
  10. Заканчивать!

Наблюдения:

Если у вас есть очень двоичные файлы в репозиториях git, возможно, вам понадобятся другие конфигурации. https://stackoverflow.com/a/541490/5132101, https://opensource.com/life/16/8/how-manage-binary-blobs-git-part-7 или хранилище больших файлов Git (LFS)[https://git-lfs.github.com/]

Подробности о псевдониме git в сообщении http://brito.blog.incolume.com.br/2013/03/guia-rapido-de-comandos-git-lado-usuario.html

person britodfbr    schedule 30.06.2020
comment
Спасибо, что нашли время написать это. Я пробую это сейчас. - person Sridhar Sarnobat; 30.06.2020
comment
1) После git reset написано fatal: unable to read tree. Это имеет значение? 2) Это лучше, чем создание нового репозитория git и копирование всех последних файлов? - person Sridhar Sarnobat; 30.06.2020
comment
в новом git вы потеряли все воспоминания о своем проекте. Со второй попытки пропала только история журнала. - person britodfbr; 01.07.2020
comment
git: 'co' is not a git command. See 'git --help'. не является командой - person AaA; 02.09.2020
comment
извините, я использую псевдоним. прочитайте этот пост: brito.blog.incolume.com.br/2013/03/ - person britodfbr; 06.09.2020