Pour obtenir un travail Git-rapide dans zsh sans bogue dans une fonction
Question
Cette question est basée sur
La solution Utilisez ou Quitter tôt. Pour être plus explicite: vous ne pouvez pas utiliser l'état de sortie de REL=$(git rev-parse --show-prefix 2>/dev/null) || { echo "$@" ; exit ; }
BR=$(git symbolic-ref HEAD 2>/dev/null) || { echo "$@" ; exit ; }
git diff --quiet
pour vérifier si vous êtes dans le référentiel de travail parce que git diff puis « sorties avec 1 s'il y avait des différences et 0 signifie aucune différence. » (Voir git-diff manpage)
Autres conseils
En fait, je pense qu'il est le premier qui est à l'origine de l'erreur, car quand je le lance dans un répertoire non-git, je reçois les erreurs. Le second ne crache pas les erreurs.
Vous pouvez rediriger la sortie d'erreur à /dev/null
.
travaillerait en bash, zsh pas sûr, mais il devrait vous donner une idée de la façon d'aller.
git_prompt_info() {
ref=$(git symbolic-ref HEAD 2>/dev/null)
if [ ! -z $ref ]; then
newref=$(echo $ref | cut -d'/' -f3)
echo $newref
fi
}
Je ne sais pas ce qui serait plus cher que, git ou parcourir tous les répertoires jusqu'à trouver un répertoire .git. Git probablement le répertoire traversal de toute façon. Je ne sais pas.
Would quelque chose comme ce travail?
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
}
Cela peut ne pas être la plus élégante solution, mais il devrait fonctionner.
Je reçois ce code enfin au travail:
# 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
}
tandis que les autres sont les mêmes que précédemment.