git shell stdout stderr

¿Por qué "git submodule add..." escribe en stderr en lugar de stdout?



shell (1)

Esto no se limita a submódulos, como se señala aquí :

El registro del submódulo se informará a stderr, ya que es coherente con el resto de informes de progreso dentro de Git .

Esto nos ayuda en un parche posterior cuando queremos reutilizar la función init_submodule en update_clone cuya stdout se canalizará al shell que lee los parámetros de stdout de una manera muy específica.

Puedes verlo también en este parche reciente :

Vuelva a enrutar la salida de stdout a stderr, ya que son solo mensajes informativos, que no deben ser consumidos por las máquinas .

Queremos iniciar submódulos desde el ayudante para la submodule update en un parche posterior y la salida estándar de dicho ayudante es consumida por las partes de la submodule update de submodule update que todavía están escritas en shell.

Por lo tanto, debemos tener cuidado con los mensajes que están en stdout.

El mensaje

Cloning into ''sub-mod''... done.

después de un comando git submodule add... se escribe en stderr . Esperaba que el mensaje se escribiera en stdout ya que no creo que indique que algo salió mal con el comando.

Puedo reproducir esto con la siguiente secuencia de comandos:

rm -rf /tmp/repo /tmp/module mkdir /tmp/repo /tmp/module cd /tmp/module git init > /dev/null echo "foo" > foo; git add foo > /dev/null git commit . -m "+ foo" > /dev/null cd /tmp/repo git init > /dev/null git submodule add /tmp/module/ sub-mod 1> /dev/null

Si cambio la redirección en el último comando a ... 2> /dev/null , no se imprime nada.