2011-01-05 15 views
34

Esta es una pregunta bastante simple: como novato de Git, me preguntaba si hay una forma de que produzca mi log de git en un archivo, preferiblemente en algún tipo de formato serializado como XML, JSON o YAML. ¿Alguna sugerencia?¿Salió la salida de registro a XML, JSON o YAML?

Respuesta

48

de salida a un archivo:

git log > filename.log 

Para especificar un formato, al igual que lo quieren todo en una sola línea

git log --pretty=oneline >filename.log 

o si desea que un formato para ser enviado por correo electrónico a través de un programa como Sendmail

git log --pretty=email |email-sending-script.sh 

para generar JSON, YAML o XML que parece que hay que hacer algo como:

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

Esta GIST (no la mía) Formatos de salida perfectamente en JSON: https://gist.github.com/1306223

Ver también:

+1

Esto funcionó como un amuleto, ¡gracias! Para futuros lectores, aquí hay un enlace a los códigos abreviados utilizados por "formato": http://www.kernel.org/pub/software/scm/git/docs/git-log.html – Andrew

+0

@andrew aww ... enlace roto ... – Marty

+0

Hmm. Bueno, todas las referencias que puedo encontrar apuntan a la misma página rota, así que lástima de quien haya eliminado la documentación de git sin una redirección. Abucheo. – Andrew

10

Hice algo como esto para crear un widget web api/javascript mínimo que muestre los últimos 5 commits en cualquier repositorio.

Si usted está haciendo esto de cualquier tipo de lenguaje de script, que realmente desea generar JSON con algo más que " para su carácter de comillas, para que pueda escapar cotizaciones reales en los mensajes de confirmación. (Se hará los tiene, tarde o temprano, y no es agradable para que para romper cosas.)

Así que terminó con la aterradora pero poco probable delimitador ^@^ y esto de línea de comandos.

var cmd = 'git log -n5 --branches=* --pretty=format:\'{%n^@^hash^@^:^@^%h^@^,%n^@^author^@^:^@^%an^@^,%n^@^date^@^:^@^%ad^@^,%n^@^email^@^:^@^%aE^@^,%n^@^message^@^:^@^%s^@^,%n^@^commitDate^@^:^@^%ai^@^,%n^@^age^@^:^@^%cr^@^},\''; 

Entonces (en Node.js) mi cuerpo de la respuesta HTTP se construye a partir stdout de la llamada a git log así:

var out = ("" + stdout).replace(/"/gm, '\\"').replace(/\^@\^/gm, '"'); 
if (out[out.length - 1] == ',') { 
    out = out.substring (0, out.length - 1); 
} 

y el resultado es agradable JSON que no se rompe con citas.

+0

Una solución rápida para escapar caracteres especiales en los mensajes de cometer sería el uso de '% F' en lugar de' s'% en la cadena de formato: '% f: desinfectado línea de asunto, propicio al Fwiw filename' –

+0

, un proyecto que utiliza este enfoque [está aquí] (https: // github.com/timboudreau/gittattle) –

+0

Vale la pena mencionar que ahora puede hacer esto usando cadenas de plantillas de ES6, anulando la necesidad de utilizar el^^^delimitador y la cadena de nodos de reemplazo. – Gary

0

He aquí https://github.com/dreamyguy/gitlogg, el último git-log => JSON analizador que usted necesitará siempre!

Algunos de características Gitlogg 's son:

  • analizar el git log de múltiples repositorios en un solo archivo JSON.
  • Introducido clave repository/valor.
  • Introducido files changed, insertions y deletions llaves/valores.
  • Introducido impact clave/valor, que representa los cambios acumulativos para la confirmación (insertions - deletions).
  • Sanitice las comillas dobles " convirtiéndolas a comillas simples ' en todos los valores que permiten o que se crean a través de la entrada del usuario, como subject.
  • Casi todos los pretty=format: marcadores de posición están disponibles.
  • fácilmente incluir/excluir qué claves/valores serán analizados a JSON comentando/descomentando los que están disponibles.
  • Código fácil de leer que está completamente comentado.
  • Comentarios sobre la ejecución de scripts en la consola.
  • Manejo de errores (ya que la ruta a los repositorios debe establecerse correctamente).

Success, the JSON was parsed and saved. éxito, el JSON se ha analizado y se guarda.

Error 001 Error 001: la ruta a los repositorios no existe.

Error 002 Error 002: existe una ruta a los repositorios, pero está vacía.