문제

이 질문은 기반입니다 .

지금은 다음과 같은 git-prompt가 있습니다. 다음에 다음 경고를받습니다 cd비 게이트 폴더에 ing.

fatal: Not a git repository (or any of the parent directories): .git                   
fatal: git diff [--no-index] takes two paths
fatal: Not a git repository (or any of the parent directories): .git
fatal: git diff [--no-index] takes two paths

ZSH의 Git-Prompt에 대한 현재 코드

 # get the name of the branch we are on
 git_prompt_info() {
     ref=$(git symbolic-ref HEAD | cut -d'/' -f3)
     echo $ref
 }
 get_git_dirty() {
   git diff --quiet || echo '*'                                                   
 }
 autoload -U colors
 colors
 setopt prompt_subst
 PROMPT='%{$fg[blue]%}%c %{$fg_bold[red]%}$(git_prompt_info)$(get_git_dirty)%{$fg[blue]%} $ %{$reset_color%}'

문제는 GIT 폴더가 아닌 폴더에 대한 경고를 일으키는 다음 코드입니다.

get_git_dirty() {
       git diff --quiet || echo '*'                                                   
     }

오류를 / tmp /에 실패하여 버그를 해결하려고했습니다.

  get_git_dirty() {
           git diff --quiet 2>/tmp/error || echo '*' 2>/tmp/error                                                   
   }

비 GIT 디렉토리의 경고 메시지를 어떻게 제거 할 수 있습니까?

도움이 되었습니까?

해결책

사용

REL=$(git rev-parse --show-prefix 2>/dev/null) || { echo "$@" ; exit ; }

또는

BR=$(git symbolic-ref HEAD 2>/dev/null) || { echo "$@" ; exit ; }

일찍 나가십시오.

더 명확하게하려면 : 출구 상태를 사용할 수 없습니다. git diff --quiet git diff이기 때문에 저장소에 있는지 확인하려면 "차이가있는 경우 1로 종료하고 0은 차이가 없음을 의미합니다." (보다 git-diff 인력)

다른 팁

실제로, 나는 비 GIT 디렉토리에서 실행할 때 오류가 발생하기 때문에 오류가 발생하는 첫 번째라고 생각합니다. 두 번째는 오류를 뱉지 않습니다.

오류 출력을로 리디렉션 할 수 있습니다 /dev/null.

이것은 ZSH에 대해서는 확실하지 않지만 BASH에서 작동하지만가는 방법에 대한 아이디어를 제공해야합니다.

git_prompt_info() {
    ref=$(git symbolic-ref HEAD 2>/dev/null)
    if [ ! -z $ref ]; then
        newref=$(echo $ref | cut -d'/' -f3)
        echo $newref
    fi
}

그래도 .git 디렉토리를 찾을 때까지 모든 디렉토리를 가로 지르거나 모든 디렉토리를 가로 지르는 것이 더 비싼 것이 무엇인지 모르겠습니다. git은 어쨌든 디렉토리를 가로 질러 할 것입니다. 확실하지 않다.

이런 일이 작동할까요?


get_git_dirty() {
set __MT_OK__=0

if [[ -d .git ]]; then
    __MT_OK__=1
fi

while [[ ! -d .git ]]; do
    cd ..
    if [[ -d .git ]]; then
        __MT_OK__=1
        break
    fi
    if [[ $PWD = "/" ]]; then
        break
    fi
done



if [[ __MT_OK__ -eq 1 ]]; then
           git diff --quiet || echo '*'                                                    
fi
}

이것은 가장 우아한 솔루션은 아니지만 작동해야합니다.

이 코드가 마침내 작동합니다.

 # get the name of the branch we are on
 git_prompt_info() {
     BR=$(git symbolic-ref HEAD 2>/dev/null | awk -F/ '{ print $3 }') || { echo "$@" ; exit ; }
     echo $BR
 }

나머지는 이전과 동일합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top