Pregunta

Esta pregunta se basa en el hilo .

Tengo el siguiente Git-rápido en el momento. Me da la siguiente advertencia después de cding a una carpeta no Git.

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

Mi código actual para Git-rápido en Zsh

 # 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%}'

El problema es el siguiente código que hace que la advertencia para carpetas no Git

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

He intentado resolver el error mediante la reorientación de errores a / tmp / sin éxito tal que

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

¿Cómo puede deshacerse de los mensajes de advertencia para los directorios no git?

¿Fue útil?

Solución

Uso

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

o

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

Salir temprano.

Para ser más explícito: no se puede utilizar el código de salida de git diff --quiet para comprobar si se encuentra en el repositorio de trabajar porque git diff luego "salidas con 1 si había diferencias y 0 significa que no hay diferencias". (Ver git-diff página del manual)

Otros consejos

En realidad, creo que es la primera que está causando el error porque cuando lo ejecuto en un directorio no git, consigo los errores. El segundo no escupir los errores.

Se puede redirigir la salida de error a /dev/null.

Esto funcionaría en bash, no está seguro acerca zsh pero debe darle una idea de cómo ir.

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

No sé lo que sería más caro, sin embargo, se ejecuta git o atravesar todos los directorios hasta encontrar un directorio .git. Git probablemente hace el recorrido de directorio de todos modos. No estoy seguro.

¿Podría algo así como este trabajo?


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
}

Esto puede no ser la solución más elegante, pero debería funcionar.

Me sale este código de fin de trabajar:

 # 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
 }

mientras que el resto son los mismos que antes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top