Пытаясь настроить мое новое приглашение 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 inited хранилище. - Вы на самом деле тестировали возможные решения во время поисков, чтобы получить хорошую подсказку?
Вот код, который я использую для сравнения (для рыбы):
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
