Git-Log-Alias ​​- fatal: mehrdeutiges Argument '% ad': unbekannte Revision oder Pfad

10

Ich versuche, den Log-Alias ​​von Git Immersion zu verwenden :

[alias]
    hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short

aber Git antwortet mit

fatal: ambiguous argument '%ad': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

mit v1.6.1. Alles, was ich bisher getan habe, sind zwei Commits für den Master und eines für einen Zweig. Dieser Alias ​​funktioniert für mich anderswo. Was könnte das Problem auf dieser bestimmten Maschine sein?

Bearbeiten - Auf der Grundlage des folgenden Vorschlags von Lesmana konnte ich feststellen, dass die Backslashes auf den Anführungszeichen nach dem Einfügen der Zeile in PuTTY entfernt wurden. Ich erhalte den obigen Fehler, wenn ich "anstelle von verwende \".

wir s
quelle

Antworten:

17

Hier ist die Quelle der Fehlermeldung:

$ git log %ad
fatal: ambiguous argument '%ad': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

Sie erhalten dieselbe Fehlermeldung von den folgenden zwei Befehlen:

$ git log --pretty=format:%h %ad | %s%d [%an] --graph --date=short
$ git log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short

Das Problem ist, dass git logdie folgenden zwei Argumente empfangen werden: --pretty=format:%h(oder --pretty=format:\"%h) und %ad. Der Rest ist, zumindest wenn er direkt als Befehl in bash ausgeführt wird, eine Pipe zum Befehl %s%d, die normalerweise nicht vorhanden ist. Die vollständige Fehlermeldung auf meinem System sieht also folgendermaßen aus:

$ git log --pretty=format:%h %ad | %s%d [%an] --graph --date=short
bash: %s%d: command not found
fatal: ambiguous argument '%ad': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

All dies zeigt, dass das Zitat irgendwie verloren gegangen ist und %adals Parameter für das Git-Protokoll interpretiert wird. Um dies zu verhindern, müssen Sie die richtige Kombination aus Anführungszeichen und Escapezeichen finden, damit die Formatzeichenfolge zum Zeitpunkt der Ausführung korrekt in Anführungszeichen gesetzt wird.

Das git config - Handbuch über Alias und zitiert:

Argumente werden durch Leerzeichen getrennt, das übliche Shell-Zitieren und Escape wird unterstützt. Zitatpaar und ein Backslash können verwendet werden, um sie zu zitieren.

Aus dieser Zeile konnte ich nicht herausfinden, wie das Zitieren und Entkommen funktioniert. Ich habe eine Kombination aus Zitieren und Entkommen im Alias ​​versucht, konnte aber keinen Sinn daraus machen.

Die folgenden Zeilen, die Sie in Ihrer Frage gepostet haben, funktionieren auf meinem System einwandfrei:

[alias]
    hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short

Sie müssen experimentieren, um die richtige Kombination auf Ihrem System zu erhalten, während Sie PuTTY und alle verwenden.

Lesmana
quelle
1
Haben Sie Unterlagen dazu? Zumindest für mich ist es umgekehrt.
Wes
@wes: Link zur Dokumentation hinzugefügt. Antwort neu geschrieben.
Lesmana
5
Ich musste doppelte Anführungszeichen durch einfache Anführungszeichen ersetzen, damit mit git 1.7.5.1 unter OSX Folgendes funktioniert:[alias] lg = log --graph --pretty='format:%C(yellow)%h %Creset%s%Cred%d'
user229044