Почему "git submodule add ..." пишет в stderr, а не в stdout?
Сообщение
Cloning into 'sub-mod'...
done.
после git submodule add...
команда пишется в stderr. Я ожидал, что сообщение будет записано на стандартный вывод, поскольку я не думаю, что оно указывает на то, что с командой что-то пошло не так.
Я могу воспроизвести это с помощью следующей последовательности команд:
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
Если я изменю перенаправление в последней команде на ... 2> /dev/null
ничего не печатается.
1 ответ
Это не ограничивается подмодулями, как отмечено здесь:
О регистрации подмодуля будет сообщено в stderr, поскольку это согласуется с остальными отчетами о ходе выполнения в Git.
Это поможет нам в следующем патче, когда мы хотим использовать
init_submodule
функция вupdate_clone
чей стандартный вывод будет передан в оболочку, которая считывает параметры из стандартного вывода очень специфическим способом.
Вы можете увидеть это также в этом недавнем патче:
Перенаправьте вывод stdout в stderr, так как это просто информационные сообщения, а не для использования машинами.
Мы хотим инициировать субмодули от помощника для
submodule update
в более позднем патче, и вывод stdout указанного помощника потребляется частямиsubmodule update
которые все еще написаны в оболочке.Поэтому мы должны быть осторожны, какие сообщения находятся на стандартном выводе.