[git] 현재 디렉토리가 Git 저장소인지 확인

zsh에서 Git 관리를위한 일련의 스크립트를 작성하고 있습니다.

현재 디렉토리가 Git 저장소인지 어떻게 확인합니까? (Git 리포지토리에 있지 않을 때는 많은 명령을 실행하고 많은 fatal: Not a git repository응답을 얻고 싶지 않습니다 ).



답변

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;

함수로 감싸거나 스크립트에서 사용할 수 있습니다.

bashzsh에 적합한 한 줄 조건으로 압축

[ -d .git ] && echo .git || git rev-parse --git-dir > /dev/null 2>&1


답변

당신이 사용할 수있는:

git rev-parse --is-inside-work-tree

git repos 작업 트리에 있으면 ‘true’로 인쇄됩니다.

자식 저장소 외부에 있고 ‘false’를 인쇄하지 않으면 여전히 STDERR로 출력을 반환합니다.

이 답변에서 가져온 것 : https : //.com/a/2044714/12983


답변

git rev-parse –git-dir 사용

만약 git rev-parse --git-dir> / dev / null 2> & 1; 그때
  : # 이것은 유효한 자식 저장소입니다.
    # 디렉토리가 최상위 레벨이 아닐 수 있습니다.
    # 관심이 있다면 git rev-parse 명령의 출력을 확인하십시오)
그밖에
  : # 이것은 git 저장소가 아닙니다.
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


답변

@Alex Cory의 답변을 바탕으로 :

[ "$(git rev-parse --is-inside-work-tree 2>/dev/null)" == "true" ]

중복 작업을 포함하지 않으며 -e모드 에서 작동 합니다.

  • @ go2null이 지적했듯이 이것은 베어 리포지토리 에서 작동하지 않습니다. 어떤 이유로 든 베어 리포지토리로 작업하려는 경우 git rev-parse출력을 무시하고 성공 여부 만 확인할 수 있습니다 .
    • 위의 줄은 스크립팅을 위해 압축되어 있으며 사실상 모든 git명령은 작업 트리 내에서만 유효 하기 때문에이 단점을 고려하지 않습니다 . 따라서 스크립팅 목적으로 “git repo”내부가 아닌 작업 트리 내부에 관심이있을 것입니다.

답변

다른 해결책은 명령의 종료 코드를 확인하는 것입니다.

git rev-parse 2> /dev/null; [ $? == 0 ] && echo 1

git repository 폴더에 있으면 1이 인쇄됩니다.