Как я могу проверить, есть ли в git-репозитории какие-либо коммиты? - PullRequest
18 голосов
/ 31 марта 2011

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

По сути, что идет в пустом поле ниже?

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

Ответы [ 2 ]

28 голосов
/ 31 марта 2011

Резюме:

  • Зафиксирован коммит: 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. В зависимости от вашего сценария это может быть важно - если вы собираетесь уничтожить каталог .git, вы действительно хотите быть параноиком.

Если вы хотите узнать, есть ли вообще какие-либо ссылки с коммитами на них, вы можете использовать git rev-list -n 1 --all. Опять же, будет вывод (SHA1 первого обнаруженного коммита), поэтому перенаправьте на /dev/null и проверьте код выхода.

Наконец, если вы хотите проверить, есть ли какие-либо коммиты - даже если они отсутствуют на каких-либо ссылках (вам нужно действительно трудно войти в это состояние), я, вероятно, просто проверю на наличие объектов с git fsck или git count-objects - или если это не удалось, перечислите .git/objects и проверьте что-либо кроме info и pack (команды, как правило, не выполняются, если нет файла .git/HEAD). И да, у вас действительно может быть репо с каплями и деревьями, но без коммитов, но вам придется постараться еще больше, чтобы добраться туда. Это абсолютно безопасные методы, если ваш скрипт страшный.

4 голосов
/ 31 марта 2011

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

Если вы используете Cygwin или работаете на Linux-машине gitk - это также полезная программа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...