Alias ​​de registro de Git: fatal: argumento ambiguo '% ad': revisión o ruta desconocida

10

Estoy tratando de usar el alias de registro de Git Immersion :

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

pero Git responde con

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

usando v1.6.1. Todo lo que he hecho hasta ahora es dos commits en master y luego uno en una rama. Este alias me funciona en otro lugar, ¿cuál podría ser el problema en esta máquina en particular?

Editar - Basado en la sugerencia de lesmana a continuación, pude determinar que de alguna manera las barras invertidas en las comillas se habían eliminado después de pegar la línea en PuTTY. Recibo el error anterior cuando lo uso en "lugar de \".

wes
fuente

Respuestas:

17

Aquí está la fuente del mensaje de error:

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

Recibirá el mismo mensaje de error de los dos comandos siguientes:

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

El problema es que git logrecibe los siguientes dos argumentos: --pretty=format:%h(o --pretty=format:\"%h) y %ad. El resto, al menos cuando se ejecuta directamente como un comando en bash, es una tubería hacia el comando %s%d, que generalmente no existe. El mensaje de error completo en mi sistema se ve así:

$ 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

Todo esto demuestra que la cita de alguna manera se perdió y %adse interpreta como un parámetro para git log. Para evitar que tenga que encontrar la combinación correcta de comillas y escapes para que la cadena de formato se cite correctamente en el momento de la ejecución.

El manual de configuración de git sobre alias y citas:

Los argumentos están divididos por espacios, se admite el uso de comillas y escapes habituales. par de comillas y una barra invertida se pueden utilizar para citarlos.

Desde esta línea no pude entender cómo funcionan las citas y las escapadas. Intenté una combinación de citar y escapar en el alias, pero no pude entenderlo.

Las siguientes líneas que publicó en su pregunta funcionan bien en mi sistema:

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

Tendrá que experimentar para obtener la combinación correcta en su sistema mientras usa PuTTY y todo.

lesmana
fuente
1
¿Tienes documentación para esto? Para mí, al menos, es al revés.
wes
@wes: Enlace agregado a la documentación. Reescribió la respuesta.
lesmana
55
Tuve que reemplazar las comillas dobles con comillas simples para que lo siguiente funcione con git 1.7.5.1 en OSX:[alias] lg = log --graph --pretty='format:%C(yellow)%h %Creset%s%Cred%d'
user229044