Warum liefert das Ausführen des Befehls als Git-Alias ​​unterschiedliche Ergebnisse?

Lesezeit: 4 Minuten

Warum liefert das Ausfuhren des Befehls als Git Alias ​​unterschiedliche Ergebnisse
Stuart Grimshaw

Ich habe den folgenden 1-Liner, den ich verwende, um zu sehen, wer ein guter Kandidat für Hilfe bei einem Stück Code sein könnte:

git log --pretty=short . | grep ^Auth | sort | uniq -c | sort -nr

das die Autoren in der Reihenfolge der Commits auflistet, es ist grob, aber es funktioniert gut.

Wenn ich es jedoch wie folgt zu meiner Git-Konfiguration hinzufüge:

[alias]
    guru=!git log --pretty=short . | grep ^Auth | sort | uniq -c | sort -nr

Laufen

git guru

Gibt andere Ergebnisse, wenn Sie es über die Befehlszeile ausführen.

stuart@beavis(rp):~/git/apps$ git log --pretty=short . | grep ^Auth | sort | uniq -c | sort -nr
710 Author: dave <dave@b2368a2b-315f-46b9-a0b0-05934f827f41>
415 Author: pete <pete@b2368a2b-315f-46b9-a0b0-05934f827f41>
402 Author: craig <craig@b2368a2b-315f-46b9-a0b0-05934f827f41>

Verglichen mit:

stuart@beavis(rp):~/git/apps$ git guru
859 Author: craig <craig@b2368a2b-315f-46b9-a0b0-05934f827f41>
813 Author: paul <paul@b2368a2b-315f-46b9-a0b0-05934f827f41>
798 Author: dave <dave@b2368a2b-315f-46b9-a0b0-05934f827f41>

Wie Stefan Näwe unten anmerkt, laufen Aliase im Stammverzeichnis Ihres Repositorys. Gibt es eine Möglichkeit, den Befehl in dem Verzeichnis auszuführen, in dem ich mich befinde, oder anzugeben?

  • Sieht aus wie du willst git shortlog -sn übrigens.

    – Patthoyten

    12. Januar 2012 um 12:30 Uhr

  • @patthoyts, füge das als Antwort hinzu und es wird ein Häkchen bekommen!

    – Stuart Grimshaw

    12. Januar 12 um 16:58 Uhr

Warum liefert das Ausfuhren des Befehls als Git Alias ​​unterschiedliche Ergebnisse
Andrej Neculau

Gibt es eine Möglichkeit, den Befehl in dem Verzeichnis auszuführen, in dem ich mich befinde, oder anzugeben?

Ja da ist. Wenn Sie einen Git-Befehl ausführen, erhält Ihre Umgebung eine GIT_PREFIX Variable mit dem Wert des relativen Pfads (von der obersten Ebene zum Pfad vor der Ausführung von git). Was Sie also brauchen, ist, Ihren Git-Aliassen (die Shell-Befehle ausführen und das richtige pwd benötigen) ein Präfix voranzustellen cd ${GIT_PREFIX:-.} &&.

Einfacher Test, fügen Sie dies zu Ihrem hinzu ~/.gitconfig


[alias]
p = !pwd && cd ${GIT_PREFIX:-.} && pwd

  • Zur Erläuterung der ${GIT_PREFIX:-.} Syntax finden Sie unter: stackoverflow.com/a/16753536/79111.

    – Ton van den Heuvel

    11. August 16 um 13:31 Uhr

1643200085 995 Warum liefert das Ausfuhren des Befehls als Git Alias ​​unterschiedliche Ergebnisse
Stefan Näwe

gits Aliase mit a Shell-Befehl (d. h. mit vorangestelltem !) in der obersten Ebene des Arbeitsverzeichnisses ausgeführt (wo die .git Leben). Einfache Aliase (ohne !) im aktuellen Verzeichnis ausführen.

  • Danke Stefan, das hat meine ursprüngliche Frage beantwortet, ich habe es jetzt geändert, um es hoffentlich für andere in der gleichen Situation nützlicher zu machen.

    – Stuart Grimshaw

    12. Januar 12 um 23:52 Uhr

  • Dies ist ein ziemlich unintuitives Git-Verhalten. Weiß jemand, wie man einen Alias ​​im aktuellen Verzeichnis ausführt? Oder ob das aktuelle Verzeichnis in einer Umgebungsvariable oder so verfügbar ist, damit ein Alias ​​​​kann cd vor dem Laufen wieder an die richtige Stelle?

    – Jim Stewart

    20. November 13 um 17:04 Uhr

  • @JimStewart siehe Andrei Neculaus Antwort oben, sie zeigt, wie man genau das macht 🙂

    – waldreich

    4. April 16 um 18:45 Uhr

Wenn Sie sich ansehen, was Sie tun, möchten Sie wahrscheinlich verwenden git shortlog -sn stattdessen, da dies die betreffende Aufgabe bereits erledigt.

Git-Aliase werden nicht alle auf der obersten Ebene ausgeführt. Wie im beschrieben Git-Konfigurationshandbuch “Beachten Sie, dass Shell-Befehle aus dem Verzeichnis der obersten Ebene eines Repositorys ausgeführt werden, das nicht unbedingt das aktuelle Verzeichnis sein muss.” Auf der obersten Ebene werden also nur Shell-Befehle ausgeführt. Wenn Sie einfach einen git-Unterbefehl aliasieren, wird er an der aktuellen Position ausgeführt. Das folgende Sitzungsprotokoll zeigt dies:

pat@FROG /c/src/WiRE.git/wdf/src (pt/wdf)
$ git rev-parse  --show-cdup
../../

pat@FROG /c/src/WiRE.git/wdf/src (pt/wdf)
$ git config alias.cdup 'rev-parse --show-cdup'

pat@FROG /c/src/WiRE.git/wdf/src (pt/wdf)
$ git cdup
../../

pat@FROG /c/src/WiRE.git/wdf/src (pt/wdf)
$ git config alias.cdup2 '!git rev-parse --show-cdup'

pat@FROG /c/src/WiRE.git/wdf/src (pt/wdf)
$ git cdup2

pat@FROG /c/src/WiRE.git/wdf/src (pt/wdf)
$

Ihr Beispiel verwendet einen Alias-Befehl, der mit „git“ beginnt. Wenn ich versuche, ‘git rev-parse –show-cdup’ als Alias ​​festzulegen, wird ein Fehler zurückgegeben, der besagt, ‘git is not a git command’, also vermute ich, dass Sie tatsächlich auch ein Ausrufezeichen hatten und es daher als Shell-Befehl ausführen läuft von der obersten Ebene.

.

646220cookie-checkWarum liefert das Ausführen des Befehls als Git-Alias ​​unterschiedliche Ergebnisse?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy