Пытаясь настроить мое новое приглашение fish shell , я закончил тестировать способы получения имени ветви, а также проверял, был ли я в git-репозитории. Я нашел (1) git rev-parse --abbrev-ref HEAD
, (2) git symbolic-ref HEAD | sed 's/refs\/heads\///'
и (3) git describe --contains --all HEAD
.
Мне любопытно, потому что я люблю простоту (1), но в новом и нетронутом (просто git init
ed) репозитории он дает мне «роковую» ошибку, в то время как (2) работает так, как задумано, т.е. мне мастер по умолчанию в качестве вывода. Дело в том, что даже с ошибкой «fatal:» код возврата равен 0. Это предполагаемое поведение?
Чтобы проверить, был ли я в git-репозитории, я просто протестировал, есть ли в текущем каталоге папка «.git»: test -d ".git"
. Простое решение, но оно работает, и кажется, что это быстрее, чем при использовании любой команды git.
Итак, мои вопросы:
- Разве этот «fatal:» с (1) не должен возвращать код выхода, отличный от 0? Если это действительно ошибка, так как я не знаю, как мерзавцы стандартизировали свои коды возврата, где я должен сообщить об этом?
- Я знаю, что если я перенаправлю (1) с помощью
^ /dev/null
(для тех, кто не знает,^
то же самое, что и2>
), я не получу сообщение об ошибке, но вместо «master» будет сказано «HEAD
, но если яcat .git/HEAD
, я получаю:ref: refs/heads/master
. Что это должно сказать? Сmaster
я просто невежественен и придирчив, потому что вместо этого следует сказатьHEAD
? Я имею в виду толькоgit init
ed хранилище. - Вы на самом деле тестировали возможные решения во время поисков, чтобы получить хорошую подсказку?
Вот код, который я использую для сравнения (для рыбы):
set -l before (date +%s%N)
git rev-parse --abbrev-ref HEAD
set -l after (date +%s%N)
set -l elapsed_time (expr $after - $before)
echo $elapsed_time
Заранее спасибо!
PS: это последние версии GNU, я имею в виду sed
, date
и expr
. Извините, если информации слишком много или что-то не имеет смысла. Потерпите меня. Спасибо!
РЕДАКТИРОВАТЬ: Как кто-то правильно угадал в ответе, вся ошибка такова:
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions