Intentando networkingirigir la salida 'git gc'

Tengo un trabajo @daily en el crontab que ejecuta git gc en todos los repos. Estoy intentando configurar un file de logging para el trabajo, pero la networkingirección de E / S no produce los resultados que estoy buscando; Obtengo un file en blanco.

He hecho todo lo habitual > , 2>&1 y así sucesivamente sin ningún éxito.

Alguien me mencionó que git gc usa ncurses para sus procedimientos de salida que arroja resultados directamente a la console, evitando así stdout / stderr (corríjame si me equivoco aquí).

¿Alguien me puede apuntar en la dirección correcta?

Puedes intentar esto:

script -q -c 'git gc' > log

O esto (con salida más legible):

script -q -c 'git gc' | sed 's/\r.*//g' > log

No usa ncurses (los progtwigs que usan ncurses generalmente toman la totalidad de la pantalla).

Corriendo

 strace -p -o git-gc.strace git gc 

muestra que los posts de progreso se escriben en stderr (descriptor de file 2), pero están deshabilitados si stderr no es un tty. Entonces si corres

 git gc 2>some_file 

entonces some_file estará vacío, porque git gc no produce los posts de progreso en absoluto.

Al mirar el código fuente ( builtin/gc.c ), hay una opción quiet establecida por la --quiet de command-line:

 git gc --quiet 

No he encontrado el código que se vuelve quiet si stderr no es un tty, pero veo un código similar en otras partes de las fonts de git, como por ejemplo:

 quiet = !isatty(2); 

No hay una opción de línea de command para desactivar la opción quiet .

Lo que significa que si quieres capturar la salida de progreso de git gc , tendrás que convencerlo de que se está ejecutando con stderr dirigido a un tty.

la respuesta de un tipo proporciona una forma de hacerlo.

Pero dado que el código hace todo lo posible para producir los posts de progreso solo si está escribiendo en un terminal, puede considerar si realmente necesita capturar esos posts. No están diseñados para ser guardados, y pueden no ser tan útiles.

Si desea examinar las fonts de git usted mismo (y, si está suficientemente motivado, hackearlos para forzar el escrito de los posts de progreso):

 git clone git://git.kernel.org/pub/scm/git/git.git