2010-09-02 22 views
28

que tienen un alias sencilla para mostrar unas últimas se compromete:Git registro tabular formatear

log --pretty=format:'%h %an %s' -10 

¿Cómo puedo hacer que los resultados se muestran en columnas, así:

898e8789 Author1    Commit message here 
803e8759 Other Author name Commit message here 
+0

Si hay una utilidad Unix en lata para hacer esto me gustaría saber acerca de ello! Lo mejor que se me ocurre es la salida con formato Perl, que es un problema. – zwol

+3

@Zack: man column es tu amigo. – toong

+0

Eso parece ser un BSDism, desafortunadamente. – zwol

Respuesta

37

En Git 1.8 0.3 y más adelante, no hay soporte nativo para esto en el pretty format, usando la sintaxis %<(N) para formatear el siguiente marcador de posición como N columnas de ancho:

$ git log --pretty=format:'%h %<(20)%an %s' -10 

Para las versiones anteriores a la 1.8.3, la versión anterior de esta respuesta, que se muestra a continuación, debería funcionar.

Aquí hay una solución en Bash usando read para analizar las líneas de registro separadas, y printf para imprimirlas, con un campo de ancho fijo para el nombre del autor para que las columnas permanezcan alineadas. Supone que | nunca aparecerá en el nombre del autor; puede elegir otro delimitador si cree que podría ser un problema.

git log --pretty=format:'%h|%an|%s' -10 | 
    while IFS='|' read hash author message 
    do 
    printf '%s %-20s %s\n' "$hash" "$author" "$message" 
    done 

Puede crear esto como un alias usando:

[alias] 
    mylog = "!git log --pretty=format:'%h|%an|%s' -10 | while IFS='|' read hash author message; do printf '%s %-20s %s\n' \"$hash\" \"$author\" \"$message\"; done" 

Estoy seguro de que podría hacer esto en un menor número de caracteres usando awk pero a medida que va the saying,

Cada vez que se enfrentan con un problema, algunas personas dicen "vamos a usar AWK". Ahora, tienen dos problemas.

Por supuesto, una vez dicho esto, tenía que encontrar la manera de hacerlo en awk que es un poco más corto:

git ... | awk -F '|' '{ printf "%s %-20s %s\n", $1, $2, $3 }' 
+0

Mientras esto funciona, usar el método nativo git-log como Sugerido por @Jesse es mucho más ordenado –

+0

@SeanBurlington Cuando escribí esta respuesta en 2010, eso no existía; se agregó el soporte para los marcadores de espacio espaciados [en 1.8.3, en 2013] (https://github.com/git/git/commit/a57523428b4c08795e793356e12afc3de812f84a) (aunque por alguna razón, parece ser [falta en las notas de la versión] (https://github.com/git/git/blob/master/Documentation/RelNotes/1.8.3.txt)). Ahora que ha señalado que hay una mejor solución disponible, la he incorporado a mi respuesta. –

+2

Espero que la sintaxis '% <(N)' funcione en otras áreas de Git donde se usa '--format', pero parece estar limitado a' --pretty' por el momento. En 2013 hubo [algún debate] (http://lists-archives.com/git/797299-for-each-ref-support-aligned-for-left-alignment.html) sobre el uso de esa sintaxis con 'for-each -ref -format' y algo de experimentación con '% (...: aligned)' pero esa discusión parece haber muerto. – Dennis

14

El siguiente comando imprimir el registro en forma de tabla

git log --pretty=format:'%h|%an|%s' -10 | column -t -s '|' 

el comando column "columnas" la salida, utilizando el "|" como separador de campo, descubrirá el ancho óptimo de la columna dada la entrada, por lo que funcionaría bien incluso si tiene más campos.

En Linux funcionará bien, siempre que no utilice colores, la implementación de Linux no maneja bien el ANSI escape codes.

Pero en Mac OS X, manejará los colores y podrá usar cualquier carácter Unicode como delimitador de campo. Uso Σ, ya que estoy bastante seguro de que no ocurrirá por casualidad en el texto de confirmación. | es una mala elección, ya que podría aparecer en la descripción comprometerse y también si se utiliza --graph --decorate --all aparecerá como parte de los símbolos utilizados en la representación gráfica

+0

Primera respuesta que vi que funcionó con esto: 'git log --pretty = format: '% cr |% s' -10 | column -t -s '|' ' – lightningleaf

31

También puede hacer:

git log --pretty=format:'%h %<(20)%an %s' -10 

No hay necesidad para shell magic o post procesamiento con awk, column etc.

+0

Esta parece ser la mejor solución para mí. ¿Dónde encontraste documentos en la sintaxis% <(20)? –

+1

Se hace referencia en los documentos 'git help log', en la sección PRETTY FORMATS (estoy usando git versión 1.8.3.4). – Conan

+0

Esta es la respuesta más corta pero más precisa. No necesita nada más, solo registro de git incorporado. – hanhp

6

Para obtener un formato realmente tabular, también debe truncar nombres de usuario que son más largos que p. Ej. 20 caracteres:

git log --pretty=format:'%h %<(20,trunc)%an %s' -10 

Además, si usted está la salida a la terminal, es posible que desee evitar que la línea se desborda por cualquiera de truncar el campo de mensajes de confirmación:

git log --pretty=format:'%h %<(20,trunc)%an %<(39,trunc)%s' -10 

o envolver las líneas y cualquier sangría desbordantes para alinear líneas:

git log --pretty=format:'%w(79, 0, 29)%h %<(20,trunc)%an %s' -10 
+0

@TamaMcGlinn Espero que esto ayude – insysion

Cuestiones relacionadas