Нужно git rev-parse, чтобы спокойно потерпеть неудачу и вернуть null
Я пытаюсь найти верхний уровень моего git-репо, но у меня ничего не получается, если в данный момент я не нахожусь в git-репо. Этот код будет вызываться из другого скрипта, где я могу взять верхний уровень git или параметр командной строки. Например,
gpath = `git rev-parse --show-toplevel --quiet`
if (gpath == null) && (options.path == null)
puts help
end
Если я попробую просто git code @ shell, я получу сообщение "роковое: не git-репозиторий". Я попытался добавить ключ --verify, и он дает тот же результат. Кто-нибудь знает как это сделать?
2 ответа
if GPATH=`git rev-parse --show-toplevel --quiet 2>/dev/null`; then
echo "repo: $GPATH"
else
echo "not a repo"
fi
2>/dev/null
перенаправит сообщение о фатальной ошибке из стандартной ошибки (stderr) в /dev/null (нигде). В таком случае, git rev-parse
выйдет со статусом сбоя, который вы можете проверить с помощью if
утверждение как выше.
Обратите внимание: обязательно используйте Git 2.41+ (второй квартал 2023 г.).
"git rev-parse --quiet foo@{u}
" ( ) " или что-нибудь, что требует анализа с помощьюGET_OID_QUIETLY
вариант не потерпел неудачу, что было исправлено в Git 2.41 (второй квартал 2023 г.).
См. (16 марта 2023 г.), сделанный Фелипе Контрерасом (
felipec
) .
(Объединено Джунио К. Хамано --
gitster
-- в коммите 8069aa0 , 28 марта 2023 г.)
коммит dfbfdc5
object-name
: исправить тихий синтаксический анализ @{u}Подпись: Фелипе Контрерас
В настоящее время
git
рев-анализ--quiet
@``(manman ){u}` на самом деле не тихий, если восходящий поток не настроен:fatal: no upstream configured for branch 'foo'
Сделай это так.
Вы не зависите от@{u}
в твоем случае, но знай, чтоgit rev-parse --quiet
не всегда был тихим.