Ответ 1
Если вы уверены, что отсутствующее дерево содержит только файл .gitkeep, и у вас есть его содержимое, то можно восстановить отсутствующее дерево.
Все, что вам нужно знать, это куча низкоуровневых команд git? Вы готовы? Идти!
В первую очередь. Вам нужно использовать git mktree
.
Эта команда считывает данные stdin и создает дерево на основе этой информации. Он выводит суммирование sha1 вновь созданного дерева ( Не забывайте, чтобы проверить, что он равен d564d0bc3dd917926892c55e3706cc116d5b165e)
Следующее, что вам нужно знать, какой формат этого входа?! Формат следующий
<mode> SP <type> SP <object> TAB <file>
где SP - это пробел, TAB - это вкладка.
- - это режим файла
- - это тип объекта git (blob для файлов, дерево для папок)
- является хэш-символом sha1 объекта
- - имя файла
Позвольте мне показать пример. Чтобы создать дерево из этой папки (файл some_file пуст)
drwxrwxr-x 2 aleksandr aleksandr 4096 2012-07-25 03:51 .
drwxrwxr-x 4 aleksandr aleksandr 4096 2012-07-25 03:54 ..
-rw-rw-r-- 1 aleksandr aleksandr 0 2012-07-25 03:51 some_file
вам нужно запустить
echo -e "100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391\tsome_file" | git mktree
Но как вы узнали о желаемом хэше sha1?! git hash-object
на помощь.
Просто
git hash-object log/.gitkeep
чтобы определить его хэш. Я думаю, что все, что вам нужно знать, чтобы восстановить ваш репозиторий.