Git-prompt Arbeit in Zsh ohne einen Fehler in einer Funktion zu erhalten
Frage
Diese Frage beruht auf
Lösung Mit oder Beenden früh. Um noch deutlicher: Sie nicht Exit-Status von REL=$(git rev-parse --show-prefix 2>/dev/null) || { echo "$@" ; exit ; }
BR=$(git symbolic-ref HEAD 2>/dev/null) || { echo "$@" ; exit ; }
git diff --quiet
können Sie überprüfen, ob Sie in Arbeits Repository sind, weil git diff dann „Ausfahrten mit 1, wenn es Unterschiede und 0 keine Unterschiede bedeutet.“ (Siehe git-diff manpage)
Andere Tipps
Eigentlich, denke ich, es ist das erste, das den Fehler verursacht, weil, wenn ich es in einem nicht-git Verzeichnis laufen, ich die Fehler bekommen. Der zweite nicht die Fehler ausspucken.
Sie könnten die Fehlerausgabe umleiten /dev/null
.
Dies würde in bash arbeiten, nicht sicher über zsh aber es sollte Ihnen eine Vorstellung davon, wie es weiter zu gehen.
git_prompt_info() {
ref=$(git symbolic-ref HEAD 2>/dev/null)
if [ ! -z $ref ]; then
newref=$(echo $ref | cut -d'/' -f3)
echo $newref
fi
}
Ich weiß nicht, was allerdings teurer wäre, git laufen oder alle Verzeichnisse durchlaufen, bis ein .git Verzeichnis. Git wahrscheinlich funktioniert die Directory Traversal sowieso. Nicht sicher.
wäre so etwas wie dieses Werk?
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
}
Dies kann die eleganteste Lösung nicht sein, aber es sollte funktionieren.
ich diesen Code endlich zu arbeiten:
# 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
}
, während der Rest ist die gleiche wie zuvor.