У меня есть очень старый репозиторий, который я использовал, и в какой-то момент некоторые файлы LFS пропали. Их довольно много. Когда я пытаюсь нажать на новый репозиторий в Gitlab, я получаю следующую ошибку
GitLab: LFS objects are missing. Ensure LFS is properly set up or try a manual
Другой контроль качества для git-lfs (здесь, здесь) указывают, что обычно какой-то вариант git lfs push --all
, но у меня нет рабочего репо с этих файлов больше нет, и они ушли навсегда. Gitlab игнорирует отправку с --no-verify и по-прежнему выдает ошибку.
Запуск git lfs fetch --all
дает длинный список отсутствующих OID
[43cb9e6d1d15bb8d31af911aa69a15a67174c5df73dabc85294ce08198cac468] Object does not exist on the server or you don't have permissions to access it: [404] Object does not exist on the server or you don't have permissions to access it
[454907d530534af9cc95903820c0a632a851b45de98ba18e1de117b8a649f8ac] Object does not exist on the server or you don't have permissions to access it: [404] Object does not exist on the server or you don't have permissions to access it
[ce1314f0c4cb05f349540fa144d33faeb2281ae552cf75dc866a8350d90fd2ac] Object does not exist on the server or you don't have permissions to access it: [404] Object does not exist on the server or you don't have permissions to access it
[d5e8925d273cb00341f00d0f40b39f97cced1e833ef687de2d4663836e7f4e45] Object does not exist on the server or you don't have permissions to access it: [404] Object does not exist on the server or you don't have permissions to access it
...
Другой пост здесь содержит скрипты для полного удаления LFS путем проверки каждого commit и смазать файлы LFS, но это кажется очень вредным для продвижения репозитория. Еще один указывает путь для полного удаления файла LFS (здесь).
Все эти вопросы кажутся неоптимальными:
- Удаление LFS сильно раздует репозиторий, и в любом случае пятно, скорее всего, не удастся для уже поврежденных файлов.
- Git pull/push -all не вариант, потому что файлы исчезли навсегда
- Удаление LFS неправильно, потому что версия файлов существует сегодня, только объект в какой-то ветке в прошлом отсутствует, поэтому все инструкции по удалению LFS сломают репо.
Есть ли способ заставить GitLab не игнорировать no-verify или эффективно отфильтровывать определенный OID из истории? Я не возражаю, если файлы исчезнут навсегда, но я надеялся сохранить историю.
Я знаю, что могу запустить git log --all -p -S 43cb9e6d1d15bb8d31af911aa69a15a67174c5df73dabc85294ce08198cac468
, чтобы получить коммит и файл (хотя запуск PER OID занимает 5-10 минут, так что это займет много часов), но я не знаю, что с этим делать.