Как я могу проверить, есть ли в репозитории git какие-либо фиксации?

Я пишу пользовательскую команду git, которая должна работать только в совершенно новом репозитории без коммитов (см. этот вопрос). Как я могу выполнить простую проверку внутри моего script, чтобы узнать, не зафиксировано ли в репозитории нулевое значение?

По существу, что находится в пробеле ниже?

if ___________ ; then
    echo "Git repo already has commits. Aborting.
else
    echo "Git repo has no commits. Doing whatever my script does."
fi

Ответ 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 страшен.

Ответ 2

Вы хотите использовать git log

Если вы используете cygwin или находитесь на машине linux gitk, это также полезная программа.