Нужно 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 г.)

коммит dfbfdc5object-name: исправить тихий синтаксический анализ @{u}

Подпись: Фелипе Контрерас

В настоящее времяgit рев-анализ --quiet@``(manman ){u}` на самом деле не тихий, если восходящий поток не настроен:

       fatal: no upstream configured for branch 'foo'

Сделай это так.

Вы не зависите от@{u}в твоем случае, но знай, чтоgit rev-parse --quietне всегда был тихим.

Другие вопросы по тегам