El resultado más corto posible del logging de git que contiene el autor y la date

¿Cómo puedo mostrar un resultado de logging de git con (al less) esta información?

* author * commit date * change 

Quiero comprimirlo en una línea por input de logging. ¿Cuál es el formatting más corto posible para eso?

(intenté --format=oneline pero eso no muestra la date)

git log --pretty=format:"%h%x09%an%x09%ad%x09%s"

hizo el trabajo. Esto produce:

  fbc3503 mads Thu Dec 4 07:43:27 2008 +0000 show mobile if phone is null... ec36490 jesper Wed Nov 26 05:41:37 2008 +0000 Cleanup after [942]: Using timezon ae62afd tobias Tue Nov 25 21:42:55 2008 +0000 Fixed #67 by adding time zone supp 164be7e mads Tue Nov 25 19:56:43 2008 +0000 fixed tests, and a 'unending appoi 93f1526 jesper Tue Nov 25 09:45:56 2008 +0000 adding time.ZONE.now as time zone 2f0f8c1 tobias Tue Nov 25 03:07:02 2008 +0000 Timezone configunetworking in environment a33c1dc jesper Tue Nov 25 01:26:18 2008 +0000 updated to most recent will_pagina 

Inspirado por la pregunta de stackoverflow: "git log output como svn ls -v" , descubrí que podía agregar los parameters exactos que necesitaba.

Por cierto, ¿hay alguna manera de acortar la date al no mostrar la hora? ACTUALIZACIÓN: sí, como se muestra en el ejemplo de "knittl" a continuación: use --date=short

Yo uso estas dos configuraciones de .gitconfig:

 [log] date = relative [format] pretty = format:%h %Cblue%ad%Creset %ae %Cgreen%s%Creset 

% ad es la date de autor, que puede ser modificada por --date o la opción especificada en la stanza [log] en .gitconfig. Me gusta la date relativa porque da una sensación inmediata de cuándo se hicieron las cosas. La salida se ve así:

 6c3e1a2 2 hours ago you@me.com lsof is a dependency now. 0754f18 11 hours ago you@me.com Properly unmount, so detaching works. 336a3ac 13 hours ago you@me.com Show ami registration command if auto register fails be2ad45 17 hours ago you@me.com Fixes #6. Sao Paolo region is included as well. 5aed68e 17 hours ago you@me.com Shorten while loops 

Todo esto, por supuesto, es en color, por lo que es fácil distinguir las diversas partes de una línea de logging. También es el valor pnetworkingeterminado al escribir git log debido a la sección [formatting].

ACTUALIZACIÓN 2014: Dado que git ahora admite relleno, tengo una buena enmienda a la versión anterior:

 pretty = format:%C(yellow)%h %Cblue%>(12)%ad %Cgreen%<(7)%aN%Cnetworking%d %Creset%s 

Este derecho alinea las dates relativas y el izquierdo alinea los nombres de los ejecutores, lo que significa que obtienes un aspecto de columna que es fácil de ver.

Captura de pantalla

ss # 1

ACTUALIZACIÓN DE 2016: Como la firma de compromiso de GPG se está convirtiendo en algo, pensé que actualizaría esta publicación con una versión que incluye verificación de firma (en la captura de pantalla es la letra magenta justo después de la confirmación). Una breve explicación de la bandera:

% G ?: muestre "G" para una buena firma (válida), "B" para una firma incorrecta, "U" para una buena firma con validez desconocida y "N" para ninguna firma

Otros cambios incluyen:

  • los colors ahora se eliminan si la salida es distinta a la tty (que es útil para la extracción, etc.)
  • git log -g ahora contiene el selector de reflog.
  • Guarde 2 parens en refnames y colóquelos al final (para preservar la alignment de columnas)
  • Trunca las dates relativas si son demasiado largas (p. Ej., 3 years, 4.. )
  • Truncar nombres de commiter (puede ser un poco corto para algunas personas, simplemente cambia el %<(7,trunc) o echa un vistazo a la function de git .mailmap para acortar los nombres de los commiters)

Aquí está la configuration:

 pretty = format:%C(auto,yellow)%h%C(auto,magenta)% G? %C(auto,blue)%>(12,trunc)%ad %C(auto,green)%<(7,trunc)%aN%C(auto,reset)%s%C(auto,networking)% gD% D 

En general, la alignment de columnas se conserva mucho mejor a expensas de algunos (con suerte) caracteres inútiles. Siéntase libre de editar si tiene alguna mejora, me encantaría que el color del post dependa de si se ha firmado una confirmación, pero parece que no es posible.

Captura de pantalla

Captura de pantalla del registro de git

 git log --pretty=format:"%H %an %ad" 

use --date= para establecer un formatting de date

 git log --pretty=format:"%H %an %ad" --date=short 

tig es una posible alternativa al uso del command git log , disponible en las principales distribuciones open source * nix.

En Debian o Ubuntu, intente instalar y ejecutar de la siguiente manera:

 $ sudo apt-get install tig 

(tig se instala)

 $ tig 

(el logging se muestra en el buscapersonas de la siguiente manera, con el hash de confirmación actual en la parte inferior)

 2010-03-17 01:07 ndesigner changes to sponsors list 2010-03-17 00:19 rcoder Raise 404 when an invalid year is specified. 2010-03-17 00:06 rcoder Sponsors page now shows sponsors' level. -------------------------- skip some lines --------------------------------- [main] 531f35e925f53adeb2146dcfc9c6a6ef24e93619 - commit 1 of 32 (100%) 

Debido a que markdown no es compatible con la coloración de text, imagine: columna 1: azul; columna 2: verde; columna 3: color de text pnetworkingeterminado. Última línea, resaltada. Pulsa Q o q para salir.


tig justifica las columnas sin bordes irregulares , que una pestaña ascii (% x09) no garantiza.

Para un formatting de date corta, pulse la letra mayúscula D (nota: d minúscula abre una vista de diferencia). Configúrelo permanentemente agregando show-date = short to ~ / .tigrc; o en una sección [tig] en .git / configure o ~ / .gitconfig.

Para ver un cambio completo :

  • presione Enter . Se abrirá un panel secundario en la mitad inferior de la window.
  • use las teclas k , j para desplazarse por el cambio en el panel secundario.
  • al mismo time, use las teclas arriba , abajo para pasar de la confirmación a la confirmación.

Como tig está separado de git y aparentemente * nix específico, probablemente necesite instalar cygwin en Windows. Pero para fedora creo que los commands de installation son $ su , (enter root password) , # yum install tig . Para freebsd, pruebe % su , (enter root password) , # pkg_add -r tig .


Por cierto, tig es bueno para mucho más que una vista rápida del logging: capturas de pantalla y manual

 git log --pretty=format:'%h %ad %s (%an)' --date=short 

o

 git log --pretty=format:'%h %ad %s | %an' --date=short 

… riffing en la respuesta de cdunn2001 arriba: perdería el correo electrónico del autor e includeía solo el nombre del autor, según Jesper y knittl, pero de acuerdo con la idea de cdunn2001 de mantener la salida en columnas de ancho constante para facilitar la lectura ( ¡gran idea!). Sin embargo, en lugar de una columna separada justificada a la izquierda para el nombre del autor, envuelvo esa bandera al final del command con un paréntesis o la desploop con un tubo. (Podría ser cualquier personaje que sirva como ayuda visual al leer el resultado … aunque podría tener sentido evitar barras invertidas o hacia atrás para networkingucir la confusión de la salida con un directory o algo).

Muestra de salida:

 6fdd155 2015-08-10 Fixes casting error in doSave | John Doe c4f4032 2015-08-10 Fix for IE save. Add help button. | Jane 29a24a6 2015-08-10 Fixes bug in Course | Mac 
 git log --pretty=format:'%h %ad %s%x09%ae' --date=short 

Resultado:

 e17bae5 2011-09-30 Integrate from development -> main nixon@whitehouse.gov eaead2c 2011-09-30 More stuff that is not worth mentioning bgates@apple.com eb6a336 2011-09-22 Merge branch 'freebase' into development jobs@nirvana.org 

El material de ancho constante es lo primero. La parte less importante, el dominio del correo electrónico, es la última y fácil de filtrar.

Use el alias de git pnetworkingefinido, es decir:

 $ git work 

Creado una vez por command:

 $ git config --global alias.work 'log --pretty=format:"%h%x09%an%x09%ad%x09%s"' 

https://git-scm.com/book/tr/v2/Git-Basics-Git-Aliases

O más coloreado con gráfico:

 $ git config --global alias.work 'log --pretty=format:"%C(yellow)%h %ar %C(auto)%d %Creset %s , %Cblue%cn" --graph --all' 

enter image description here

Para mostrar los compromisos que he organizado que están listos para impulsar, lo hago

 git log remotes/trunk~4..HEAD --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s" --date=short | awk -F'\t' '{gsub(/[, ]/,"",$2);gsub(/HEAD/, "\033[1;36mH\033[00m",$2);gsub(/master/, "\033[1;32mm\033[00m",$2);gsub(/trunk/, "\033[1;31mt\033[00m",$2);print $1 "\t" gensub(/([\(\)])/, "\033[0;33m\\1\033[00m","g",$2) $3}' | less -eiFRXS 

La salida se ve algo así como:

 ef87da7 2013-01-17 haslers (Hm)Fix NPE in Frobble 8f6d80f 2013-01-17 haslers Refactor Frobble 815813b 2013-01-17 haslers (t)Add Wibble to Frobble 3616373 2013-01-17 haslers Add Foo to Frobble 3b5ccf0 2013-01-17 haslers Add Bar to Frobble a1db9ef 2013-01-17 haslers Add Frobble Widget 

Donde la primera columna aparece en amarillo, y 'H' 'm' y 't' en parentesis muestran HEAD, master y trunk y aparecen en sus colors usuales "–decorate"

Aquí está con saltos de línea para que pueda ver lo que está haciendo:

 git log remotes/trunk~4..HEAD --date=short --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s" | awk -F'\t' '{ gsub(/[, ]/,"",$2); gsub(/HEAD/, "\033[1;36mH\033[00m",$2); gsub(/master/, "\033[1;32mm\033[00m",$2); gsub(/trunk/, "\033[1;31mt\033[00m",$2); print $1 "\t" gensub(/([\(\)])/, "\033[0;33m\\1\033[00m","g",$2) $3}' 

Tengo un alias para "organizar" con:

 git config alias.staged '!git log remotes/trunk~4..HEAD --date=short --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s" | awk -F"\t" "{gsub(/[, ]/,\"\",\$2);gsub(/HEAD/, \"\033[1;36mH\033[00m\",\$2);gsub(/master/, \"\033[1;32mm\033[00m\",\$2);gsub(/trunk/, \"\033[1;31mt\033[00m\",\$2);print \$1 \"\t\" gensub(/([\(\)])/, \"\033[0;33m\\\\\1\033[00m\",\"g\",\$2) \$3}"' 

(¿Hay alguna manera más fácil de escaping de eso? Era un poco complicado calcular qué era necesario escaping)

Todas las sugerencias mencionadas usan %s marcador de position para el tema. Recomiendo usar %B porque %s formatting %s conserva las líneas nuevas y el post de confirmación de varias líneas aparece aplastado.

 git log --pretty=format:"%h%x09%an%x09%ai%x09%B" 

Ejecuta esto en la carpeta del proyecto:

 $ git log --pretty=format:"%C(yellow)%h %ar %C(auto)%d %Creset %s , %Cblue%cn" --graph --all 

Y si lo desea, agregue esta línea a su ~ / .gitconfig:

 [alias] ... list = log --pretty=format:\"%C(yellow)%h %ar %C(auto)%d %Creset %s, %Cblue%cn\" --graph --all