현재 디렉터리가 Git 리포지토리인지 확인합니다.
저는 zsh에서 Git 관리를 위한 일련의 스크립트를 작성하고 있습니다.
현재 디렉터리가 Git 저장소인지 확인하려면 어떻게 해야 합니까? (Gitrepo에 있지 않을 때는 여러 명령을 실행하고 여러 명령을 사용하지 않습니다.fatal: Not a git repository
응답).
사용할 수 있는 항목:
git rev-parse --is-inside-work-tree
Git repos 작업 트리에 있는 경우 STDOUT에 'true'가 인쇄됩니다.
Git repo를 벗어나면('false'는 인쇄되지 않음) 여전히 STDERR로 출력을 반환합니다.
다음 답변에서 발췌: https://stackoverflow.com/a/2044714/12983
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 --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
편집:git-rev-parse
이제 (1.7.0 기준) 지원--show-toplevel
그래서 당신은 할 수 있습니다.if test "$(pwd)" = "$(git rev-parse --show-toplevel)"
현재 디렉터리가 최상위 디렉터리인지 확인합니다.
아니면 이렇게 할 수도 있습니다.
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
@Alex Cory의 답변을 기반으로 합니다.
[ "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]
중복 작업을 포함하지 않고 작동합니다.-e
모드
- @go2null이 지적했듯이, 이것은 맨 레포에서 작동하지 않을 것입니다.어떤 이유로든 맨 레포로 작업하려면 다음을 확인하면 됩니다.
git rev-parse
성공했습니다. 출력을 무시합니다.- 위의 행은 스크립팅을 위한 것이고, 사실상 모든 것이기 때문에 저는 이것이 단점이라고 생각하지 않습니다.
git
명령은 작업 트리 내에서만 유효합니다.따라서 스크립팅 목적으로 "git repo" 내부뿐만 아니라 작업 트리 내부에도 관심이 있을 가능성이 높습니다.
- 위의 행은 스크립팅을 위한 것이고, 사실상 모든 것이기 때문에 저는 이것이 단점이라고 생각하지 않습니다.
공개적으로 액세스할 수 있는/문서화된 방법이 있는지 확실하지 않습니다(Git 소스 자체에서 사용/남용할 수 있는 일부 내부 Git 함수가 있음).
당신은 다음과 같은 것을 할 수 있습니다.
if ! git ls-files >& /dev/null; then
echo "not in git"
fi
이 답변은 샘플 POSIX 셸 함수와 @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
다른 해결책은 명령의 종료 코드를 확인하는 것입니다.
git rev-parse 2> /dev/null; [ $? == 0 ] && echo 1
Git 저장소 폴더에 있는 경우 1이 인쇄됩니다.
종료 코드를 사용하지 않는 이유는 무엇입니까?현재 디렉터리에 git 저장소가 있는 경우git branch
그리고.git tag
명령은 종료 코드 0을 반환합니다. 그렇지 않으면 0이 아닌 종료 코드가 반환됩니다.이렇게 하면 Git 저장소의 존재 여부를 확인할 수 있습니다.간단히 다음을 실행할 수 있습니다.
git tag > /dev/null 2>&1
장점:휴대용.bare 저장소와 non-bare 저장소 모두에서 작동하며 sh, zsh 및 bash에서 작동합니다.
설명.
git tag
존재 여부를 확인하기 위해 리포지토리의 태그를 가져오는 중입니다.> /dev/null 2>&1
정상 및 오류 출력을 포함하여 인쇄할 수 없습니다.
TLDR():Really?!check-git-repo
를 들어, 예를들, 다같이파의라는 이름의 수 .check-git-repo
다음 내용을 사용하여 실행 파일로 만들고 실행합니다.
#!/bin/sh
if git tag > /dev/null 2>&1; then
echo "Repository exists!";
else
echo "No repository here.";
fi
git repo 여부 확인
if [ $(git rev-parse --is-inside-work-tree) = true ]; then
echo "yes, is a git repo"
git pull
else
echo "no, is not a git repo"
git clone url --depth 1
fi
이것은 나에게 효과가 있습니다.여전히 오류가 발생하지만 이 오류는 억제하기에 충분히 쉽습니다.하위 폴더 내에서도 작동합니다!
git status >/dev/null 2>&1 && echo Hello World!
조건부로 더 많은 작업이 필요한 경우 이를 if then 문에 넣을 수 있습니다.
##Current branch
echo $(git branch --show-current 2> /dev/null && echo '')
echo $(git branch --show-current 2> /dev/null)
##OR
GIT_DIR=$(git rev-parse --git-dir 2> /dev/null)
언급URL : https://stackoverflow.com/questions/2180270/check-if-current-directory-is-a-git-repository
'source' 카테고리의 다른 글
설치된 npm 패키지의 버전 찾기 (0) | 2023.05.25 |
---|---|
문자 코드를 문자로 변환(VB.NET) (0) | 2023.05.20 |
의 우선 순위 대기열입니다.그물 (0) | 2023.05.20 |
HttpRequestValidation을 피하는 방법예외를 발생시킨 동일한 뷰를 렌더링하는 ASP.NET MVC에서 예외 발생 (0) | 2023.05.20 |
"\n"과 환경의 차이입니다.새 줄 (0) | 2023.05.20 |