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 }'
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
@Zack: man column es tu amigo. – toong
Eso parece ser un BSDism, desafortunadamente. – zwol