Проверьте, является ли текущий каталог Git-репозиторием - PullRequest
155 голосов
/ 02 февраля 2010

Я пишу серию скриптов для управления Git в zsh.

Как проверить, является ли текущий каталог репозиторием Git? (Когда я не в репозитории Git, я не хочу выполнять кучу команд и получать кучу fatal: Not a git repository ответов).

Ответы [ 12 ]

0 голосов
/ 23 октября 2018

Этот ответ содержит пример функции оболочки POSIX и пример использования, дополняющий @ 1001 * answer .

@ jabbie
is_inside_git_repo() {
    git rev-parse --is-inside-work-tree >/dev/null 2>&1
}

git возвращает уровень ошибки 0, если он находится внутри репозитория git, иначе он возвращает уровень ошибки 128. (Он также возвращает true или false, если он находится внутри репозитория git.)

Пример использования

for repo in *; do
    # skip files
    [ -d "$repo" ] || continue
    # run commands in subshell so each loop starts in the current dir
    (
        cd "$repo"
        # skip plain directories
        is_inside_git_repo || continue
        printf '== %s ==\n' "$repo"
        git remote update --prune 'origin' # example command
        # other commands here
    )
done
0 голосов
/ 08 августа 2018
! git rev-parse --is-inside-work-tree >/dev/null 2>&1 || { 
  printf '%s\n\n' "GIT repository detected." && git status
}

The! отрицает, поэтому даже если вы запустите это в каталоге, который не является git-репо, это не даст вам некоторых фатальных ошибок

> / dev / null 2> & 1 отправляет сообщения на / dev / null , так как вы находитесь сразу после состояния выхода. {} предназначены для группирования команд, поэтому все команды после || будут выполняться, если git rev-parse завершился успешно, так как мы используем! который отрицал статус выхода git rev-parse. printf предназначен только для печати некоторого сообщения. и git status для распечатки статуса репо.

Оберните это в функцию или поместите в скрипт. Надеюсь, это поможет

...