¿Cómo reproducir el formatting de git log –oneline –decorate?

¿Dónde está definido el formatting de git log –oneline –decorate?

Usando git Iog –format = format: 'mi formatting', no puedo reproducir los colors de las twigs, tags y HEAD como se muestra en git log –oneline –decorate.

git log --oneline --decorate 

muestra HEAD en azul claro, los nombres de las twigs en verde y las puntuaciones (,,) en marrón.

Lo más cerca que he estado de conseguir lo que quiero es:

 git log --graph --abbrev-commit --decorate --date=short --format=format:'%C(bold blue)%h%C(reset) %C(bold green)%ad%C(reset)%d %C(white)%s%C(reset)' -20 

con la única diferencia de que las twigs / HEAD / tags no están coloreadas como con el command anterior.

TL; DR – No creo que sea posible get el formatting exacto que git log --oneline proporciona porque la opción --format no permite ninguna instrucción condicional, mientras que git-log usa una function para generar ese cadena en un post por commit.

Lo más cercano que tengo con los colors es este:

 git log --format=format:'%C(auto)%h%C(reset) %C(auto)%s%C(reset)' 

Se ve así en mi máquina:

terminal-screenshot


Versión larga:

La mayor parte de la documentation que puede leer en git-log está aquí: https://git-scm.com/docs/git-log

Profundicé en la fuente (disponible en github aquí ) para ver qué hace exactamente git para la opción --oneline , esto es lo que encontré:

  • El path comienza aquí en revision.c , donde se analizan las opciones de la línea de command

  • La opción se analiza en pretty.c para que coincida con CMIT_FMT_ONELINE de cmit_fmt enum (definida en commit.h )

  • Finalmente, la printing real ocurre en pretty.c en pp_commit_easy .

  • Aquí es donde se vuelve complicado y complicado. Puede ver references a CMIT_FMT_ONELINE en un puñado de lugares en pretty.c . Creo que solo pp_title_line se ejecuta para cada confirmación cuando se especifica la opción --oneline . Puede ver que hay un montón de formateo condicional mientras se construye el buffer de cadena.

Así que sí, no creo que haya una forma de replicar el formatting real con las tags y la metainformación (HEAD -> master) . Probablemente pueda escribir un script de shell que haga lo mismo, pero su performance puede no coincidir con el de git.

No parece ser posible con la versión de Git <1.8.3.

Desde git 1.8.3, uno podría usar el token de color% C (automático):

  git log --graph --abbrev-commit --decorate --date=short --format=format:'%C(bold blue)%h%C(reset) %C(bold green)%ad%C(reset) %C(auto)%d %C(reset) %C(white)%s%C(reset)' -20 

El elemento key es:

 %C(auto)%d %C(reset) 

Ver también:

Color en git-log
Git bonito formatting de colors