Ich habe iTerm2 mit zsh verwendet und mit dem folgenden Alias erhalte ich jedes Mal eine Fehlermeldung, wenn ich ein neues iTerm2-Fenster oder eine neue Registerkarte öffne.
alias clear-git-branches="git fetch -p && for branch in `git branch -vv | grep ': gone]' | awk '{print $1}'`; do git branch -D $branch; done"
Ich erhalte folgende Fehlermeldung:
fatal: not a git repository (or any of the parent directories): .git
Da ein Fehler ausgegeben wird, der damit zusammenhängt, dass das Verzeichnis kein Git-Repository ist, gehe ich davon aus, dass es ein Problem mit den Anführungszeichen gibt. Ich habe versucht, es zu ändern, aber es ist derselbe Fehler aufgetreten.
Ich verwende diesen Befehl, um lokale Zweige ohne Upstream zu löschen.
Antwort1
Wie Kamil anmerkte, werden einige Teile des Befehls analysiert, da Sie doppelte Anführungszeichen anstelle von einfachen Anführungszeichen verwenden, während die Aliase geladen werden (z. B. wenn Sie in Ihrem Terminal eine Registerkarte oder ein Fenster öffnen).
Es sieht einfach ok aus, wenn Sie es in Ihrem Terminal ausführen, weil dann alles auf einmal ausgeführt wird.
Alles in einfache Anführungszeichen zu setzen würde das Problem lösen, aber Probleme mit den inneren einfachen Anführungszeichen verursachen. Ich empfehle stattdessen, es als Funktion neu zu schreiben. In diesem Fall können Sie es genauso verwenden, wie Sie den Alias verwenden würden.
clear-git-branches() {
git fetch -p && \
for branch in $(git branch -vv | awk '/: gone]/{print $1}');
do git branch -D "${branch}";
done
}
Antwort2
Ich hatte ein ähnliches oder dasselbe Problem mit Folgendem in meinem .zshrc
:
# use gcm to checkout master or main
alias gcm="git checkout $(git remote show origin | grep 'HEAD branch' | sed 's/.*: //') && git pull"
Beim Öffnen eines neuen iTerm2-Fensters oder Terminalfensters oder beim Neuladen der Umgebung erhalte ich:
source ~/.zshrc
fatal: not a git repository (or any of the parent directories): .git
Durch das Auskommentieren dieser Zeile wurde das Problem behoben:
# alias gcm="git checkout $(git remote show origin | grep 'HEAD branch' | sed 's/.*: //') && git pull"
Nach dem Umschreiben; Vertauschen von doppelten und einfachen Anführungszeichen:
alias gcm='git checkout $(git remote show origin | grep "HEAD branch" | sed "s/.*: //") && git pull'
Der Fehler ist behoben.