为什么“git submodule add ...”写入stderr而不是stdout?

时间:2016-06-01 06:42:37

标签: git shell stdout stderr

消息

Cloning into 'sub-mod'...
done.
git submodule add...命令写入 stderr

。我希望将消息写入 stdout ,因为我不认为它表明该命令出现了问题。

我可以使用以下命令序列重现这一点:

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 个答案:

答案 0 :(得分:1)

这不仅限于子模块,如noted here

  

子模块的注册将报告给 stderr,就像那样   与Git中其他进度报告一致

     

当我们想要重用时,这有助于我们在以后的补丁中使用   init_submodule function update_clone {s}输出标准   以非常特定的方式从stdout读取参数的shell。

您也可以在this recent patch中看到它:

  

将stdout的输出重新发送到 stderr,因为它只是提供信息   消息,不被机器消费

     

我们想从submodule update的帮助器初始化子模块   在后来的补丁中,消耗了所述助手的stdout输出   由submodule update的部分仍然用shell编写。

     

所以我们要小心哪些消息在stdout上。