Как сопоставить висячие капли с именами файлов в Git?

У меня есть еще один пример выполнения git rm -rf без первоначального коммита. (Я понял, что добавил много бесполезных файлов и хотел добавить несколько фильтров.)

Теперь у меня осталось 23000 свисающих шариков без деревьев, но с полной историей Git!

Я буду использовать скрипт, чтобы перебрать имена BLOB-объектов (используя git show 'blobname' > 'filename'), но можно ли связать эти имена файлов из истории с BLOB-объектами?

1 ответ

Для всех вас, кто сделал / сделает точную ошибку, которую я сделал, вот конец истории.

Прежде всего, краткое резюме того, что я сделал.

  1. Создан пустой репозиторий
  2. перенес много файлов / каталогов в него
  3. gid add .
  4. понял, что я только что добавил ТОННУ ненужных / не очень важных / избыточных файлов
  5. git rm -rf с целью добавления некоторых фильтров в.gitignore
  6. понял, что все мои файлы пропали...

Я перепробовал все виды инструментов для восстановления данных; неудачно. Лучшее, что я мог сделать, это следующая процедура.

  1. Сразу скопируйте рабочий каталог на другой том (внешний HD).
  2. git fsck --lost-found возможно с --unreachable --cache
    Это создает папку .git/lost-found/other со всеми (большей частью?) исходными файлами были заново созданы, но без имен файлов. Теперь проблема заключалась в том, как восстановить имена файлов. К сожалению, все файлы, которые я восстановил, были блобами, без корней, поэтому у меня не было информации о древовидной структуре каталогов.
  3. Несмотря на то, что у меня был полный список потерянных имен файлов (только имена, а не размеры), я не смог найти корня, поэтому эта информация была в основном бесполезной.
  4. В общем, можно написать скрипт, который использует file посмотреть на тип файла (file <filename>) и присоединяет к нему соответствующее расширение. Проблема сопоставления файлов с именами файлов до сих пор остается.
    В качестве альтернативы можно использовать грубую силу. Например, чтобы восстановить pdf, я отсортировал восстановленные файлы по длине, прикрепил к ним расширение.pdf и просмотрел их один за другим. Файлы, которые были настоящими PDF-файлами, показывают что-то, а другие нет.
  5. Чтобы восстановить текстовые файлы (txt, tex, c, h..), я использовал grep, ища строку, которая, как я помню, принадлежит конкретному (группе) файлу (файлам).
  6. Теперь я сохраняю каталог со всеми потерянно-восстановленными файлами, и каждый раз, когда мне нужен один из них, я использую небольшой вариант маркера 4.

Удачи!

Другие вопросы по тегам