Как сопоставить висячие капли с именами файлов в Git?
У меня есть еще один пример выполнения git rm -rf
без первоначального коммита. (Я понял, что добавил много бесполезных файлов и хотел добавить несколько фильтров.)
Теперь у меня осталось 23000 свисающих шариков без деревьев, но с полной историей Git!
Я буду использовать скрипт, чтобы перебрать имена BLOB-объектов (используя git show 'blobname' > 'filename'
), но можно ли связать эти имена файлов из истории с BLOB-объектами?
1 ответ
Для всех вас, кто сделал / сделает точную ошибку, которую я сделал, вот конец истории.
Прежде всего, краткое резюме того, что я сделал.
- Создан пустой репозиторий
- перенес много файлов / каталогов в него
gid add .
- понял, что я только что добавил ТОННУ ненужных / не очень важных / избыточных файлов
git rm -rf
с целью добавления некоторых фильтров в.gitignore- понял, что все мои файлы пропали...
Я перепробовал все виды инструментов для восстановления данных; неудачно. Лучшее, что я мог сделать, это следующая процедура.
- Сразу скопируйте рабочий каталог на другой том (внешний HD).
git fsck --lost-found
возможно с--unreachable --cache
Это создает папку.git/lost-found/other
со всеми (большей частью?) исходными файлами были заново созданы, но без имен файлов. Теперь проблема заключалась в том, как восстановить имена файлов. К сожалению, все файлы, которые я восстановил, были блобами, без корней, поэтому у меня не было информации о древовидной структуре каталогов.- Несмотря на то, что у меня был полный список потерянных имен файлов (только имена, а не размеры), я не смог найти корня, поэтому эта информация была в основном бесполезной.
- В общем, можно написать скрипт, который использует
file
посмотреть на тип файла (file <filename>
) и присоединяет к нему соответствующее расширение. Проблема сопоставления файлов с именами файлов до сих пор остается.
В качестве альтернативы можно использовать грубую силу. Например, чтобы восстановить pdf, я отсортировал восстановленные файлы по длине, прикрепил к ним расширение.pdf и просмотрел их один за другим. Файлы, которые были настоящими PDF-файлами, показывают что-то, а другие нет. - Чтобы восстановить текстовые файлы (txt, tex, c, h..), я использовал grep, ища строку, которая, как я помню, принадлежит конкретному (группе) файлу (файлам).
- Теперь я сохраняю каталог со всеми потерянно-восстановленными файлами, и каждый раз, когда мне нужен один из них, я использую небольшой вариант маркера 4.
Удачи!