Ответ 1
Резюме:
- Выполняется фиксация: test
git rev-parse HEAD &> /dev/null
- Ссылка, указывающая на наличие коммита: test
git rev-list -n 1 --all &> /dev/null
- Объекты существуют в репо: тестовый вывод
git fsck
,git count-objects
или проверка содержимого.git/objects
И теперь для обсуждения!
Если вы хотите узнать, проверена ли фиксация, вы можете использовать git rev-parse HEAD
. Будет выход, поэтому вы, вероятно, захотите перенаправить на /dev/null
и просто используйте код выхода. Для всех практических целей это будет достаточно хорошо - делая нормальные вещи, в значительной степени невозможно закончить без HEAD
, указывая на что угодно. Но это возможно, например, путем удаления файлов в каталоге .git. В зависимости от вашего script это может быть важно - если вы собираетесь сбить каталог .git, вы действительно хотите быть параноиком.
Если вы хотите посмотреть, есть ли какие-либо ссылки вообще с фиксацией на них, вы можете использовать git rev-list -n 1 --all
. Опять же, будет выход (SHA1 первого встреченного коммита), поэтому переадресуйте на /dev/null
и проверьте код выхода.
Наконец, если вы хотите проверить, есть ли какие-либо коммиты, даже если они не включены в какие-либо ссылки (вам нужно очень тяжело попасть в это состояние), я бы, вероятно, просто проверил наличие объектов с git fsck
или git count-objects
- или сбой, перечислите .git/objects
и проверьте что-либо помимо info
и pack
(команды имеют тенденцию к сбою, если нет файла .git/HEAD
). И да, на самом деле у вас может быть репо с каплями и деревьями, но никаких коммитов нет, но вам придется попытаться еще тяжелее добраться туда. Это самые безопасные методы, если ваш script страшен.