Проверьте, является ли текущий каталог репозиторием Git
Я пишу серию скриптов для управления Git в zsh.
Как проверить, является ли текущий каталог репозиторием Git? (Когда я не в репо Git, я не хочу выполнять кучу команд и получать кучу fatal: Not a git repository
ответы).
12 ответов:
скопировано из файла завершения bash следующий наивный способ сделать это
# Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org> # Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/). # Distributed under the GNU General Public License, version 2.0. if [ -d .git ]; then echo .git; else git rev-parse --git-dir 2> /dev/null; fi;
Вы можете либо обернуть это в функцию и использовать его в скрипте.
Сконденсированный в одну линию условие соответствующее для Баш или ЗШ
[ -d .git ] || git rev-parse --git-dir > /dev/null 2>&1
вы можете использовать:
git rev-parse --is-inside-work-tree
который будет печатать "true", если вы находитесь в рабочем дереве репозиториев git.
обратите внимание, что он по-прежнему возвращает вывод в STDERR, если вы находитесь за пределами РЕПО git (и не печатает "false").
из этого ответа: https://stackoverflow.com/a/2044714/12983
использовать git rev-parse --git-dir
if git rev-parse --git-dir > /dev/null 2>&1; then : # This is a valid git repository (but the current working # directory may not be the top level. # Check the output of the git rev-parse command if you care) else : # this is not a git repository fi
или вы могли бы сделать это:
inside_git_repo="$(git rev-parse --is-inside-work-tree 2>/dev/null)" if [ "$inside_git_repo" ]; then echo "inside git repo" else echo "not in git repo" fi
Не уверен, что есть общедоступный / документированный способ сделать это (есть некоторые внутренние функции git, которые вы можете использовать/злоупотреблять в самом источнике git)
вы могли бы сделать что-то вроде:
if ! git ls-files >& /dev/null; then echo "not in git" fi
другое решение-проверить код завершения команды.
git rev-parse 2> /dev/null; [ $? == 0 ] && echo 1
это будет печатать 1, если вы находитесь в папке репозитория git.
очень быстрый вариант http://vc.gerg.ca/hg/vcprompt/ .. multi-VC, в C, никаких зависимостей, кроме себя.
вы уже проверили функции в дистрибутиве zsh? Смотрите запись в блоге о vcs_info в zsh.
обновление:
похоже, что оригинальная ссылка была удалена и автор изменил свой основной домен. Я проверил google, и я думаю, что в настоящее время связанный пост имеет тот же контент, но я не знаю точно (это было давно, так как я проверил оригинальную ссылку).
это работает для меня. Вы все еще получаете ошибки, но их достаточно легко подавить. он также работает из подпапок!
git status >/dev / null 2>&1 && Echo Привет Мир!
вы можете поместить это в Оператор if then, если вам нужно условно сделать больше.
! 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 удалось, так как мы используем a ! которая свела на нет состояние выхода из ГИТ Рэв-анализа. Этот printf это просто напечатать какое-то сообщение и git status для печати статуса РЕПО.
оберните его в функцию или поместите в скрипт. Надеюсь, это поможет