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;
함수로 감싸거나 스크립트에서 사용할 수 있습니다.
bash 및 zsh에 적합한 한 줄 조건으로 압축
[ -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이 인쇄됩니다.