Alias ​​du journal Git - fatal: argument ambigu '% ad': révision ou chemin inconnu

10

J'essaie d'utiliser l' alias de journal de Git Immersion :

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

mais Git répond par

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

en utilisant la v1.6.1. Tout ce que j'ai fait jusqu'à présent, c'est deux commits sur master puis un sur une branche. Cet alias fonctionne pour moi ailleurs, quel pourrait être le problème sur cette machine particulière?

Edit - Sur la base de la suggestion de lesmana ci-dessous, j'ai pu déterminer que les barres obliques inversées sur les guillemets avaient été supprimées après avoir collé la ligne dans PuTTY. J'obtiens l'erreur ci-dessus lors de l'utilisation "au lieu de \".

nous s
la source

Réponses:

17

Voici la source du message d'erreur:

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

Vous obtiendrez le même message d'erreur à partir des deux commandes suivantes:

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

Le problème est que git logreçoit les deux arguments suivants: --pretty=format:%h(ou --pretty=format:\"%h) et %ad. Le reste, au moins lorsqu'il est exécuté directement en tant que commande dans bash, est un canal vers la commande %s%d, qui n'existe généralement pas. Le message d'erreur complet sur mon système ressemble donc à ceci:

$ 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

Tout cela démontre que la citation s'est en quelque sorte perdue et %adest interprétée comme un paramètre pour git log. Pour éviter cela, vous devez trouver la combinaison correcte de guillemets et d'échappement afin que la chaîne de format soit correctement citée au moment de l'exécution.

Le manuel de configuration de git sur les alias et les citations:

Les arguments sont divisés par des espaces, les citations et les échappements habituels du shell sont pris en charge. une paire de guillemets et une barre oblique inversée peuvent être utilisés pour les citer.

À partir de cette ligne, je n'ai pas pu comprendre comment fonctionnent les citations et les échappements. J'ai essayé une combinaison de citation et d'échappatoire dans l'alias, mais je n'ai pas pu donner de sens à cela.

Les lignes suivantes que vous avez postées dans votre question fonctionnent bien sur mon système:

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

Vous devrez expérimenter pour obtenir la bonne combinaison sur votre système tout en utilisant PuTTY et tout.

lesmana
la source
1
Avez-vous une documentation à ce sujet? Pour moi au moins c'est l'inverse.
wes
@wes: Ajout d'un lien vers la documentation. Réécriture de la réponse.
lesmana
5
J'ai dû remplacer les guillemets doubles par des guillemets simples pour faire le travail suivant avec git 1.7.5.1 sous OSX:[alias] lg = log --graph --pretty='format:%C(yellow)%h %Creset%s%Cred%d'
user229044