'git cat-file-p ':" fatal: недопустимое имя объекта " для случайных объектов.git / объекты
Я хочу узнать больше о внутренней работе git, поэтому я запустил эти команды:
cd .git/objects/62
ls
00cb2f01089db22aca24675272a16712e89747
0ee798881329430bfef6c558be7b14c1f0676f
1087f408e2f2bd782d53a1211a7418fee4f6a7
a6a71f3bd5a3af882f3f0ec4fad4c672055746
f95e69f344b52c5038d922260189475626e69a
git cat-file -p 00cb2f01089db22aca24675272a16712e89747
и получил следующую ошибку:
fatal: Not a valid object name 00cb2f01089db22aca24675272a16712e89747
почему я получил его?
Я пробовал 10 раз (для разных файлов из разных каталогов внутри .git / objects) и получил ту же ошибку.
как я могу просмотреть фактическое содержимое файлов (будь то blob, дерево или фиксация)?
2 ответов
вам не нужно cd в .git object store, но вы должны предоставить полный хэш sha1:
git cat-file -p 621087f408e2f2bd782d53a1211a7418fee4f6a7
Git хранит свои объекты в .git/objects
, распределены по 256 папкам, чтобы сохранить размер каталога вниз. Первые два символа каждого хэша используются в качестве имени каталога, остальные 38 символов используются в качестве имени файла.
спасибо @knittl за отличный ответ.
вы можете получить построить все объекты с помощью этого скрипта bash.
cd .git/objects;
for d in * ; do (
cd "$d";
for p in * ; do ( echo "$d$p";); done
); done
или вы можете получить запустить cat-p на все!
cd .git/objects;
for d in * ; do (
cd "$d";
for p in * ; do (
echo "$d$p";
git cat-file -p $d$p
); done
); done