¿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
enupdate_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 lasubmodule update
desubmodule 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.