현재 디렉토리가 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이 인쇄됩니다.