2017-03-06 165 views
0

我正在使用Windows 7,32位git版本2.12.0.windows.1。将git包创建输出重定向到日志文件

我正在写一个简单的批处理脚本来将git仓库捆绑到一个独特的文件中。我想将命令的输出重定向到一个日志文件,然后我可以检查,但是我遇到了一个我无法打开的行为。

在任何git仓库,如果我运行下面的命令:

git bundle create bundle.out --all > bundle.log 

我期望命令的输出重定向到文件bundle.log。但是,运行该命令后,文件bundle.log已创建,但它是空的,输出显示在控制台上,就好像没有应用重定向一样。因此,我想也重定向错误流:

git bundle create bundle.out --all 1> bundle.log 2> error.log 

此外,在这种情况下,包被创造,这两个文件bundle.log创建error.log中,但它们都是空的。奇怪的是,控制台上没有显示输出。所以,我的问题是,这个输出在哪里消失?

为了便于比较,我试着用另一种“类似”的命令,那就是:

git bundle verify bundle.out 1> stream1.log 2> stream2.log 

Applyed之前创建的包,并将该行为是一个我所料:stream1.log包含列表和参考文献stream2.log包含“bundle.out可以”。

我在做什么错?我如何实现我的目标,即将git bundle create的输出重定向到日志文件?

+0

[This answer](http://stackoverflow.com/a/41859873/1529709)似乎解释了行为... – zb226

回答

0

git bundle将其输出打印到stderr流。但是,只有当stderr流是TTY,我才会这样做。即基本上是一个互动控制台如果不是,但某些管道或文件,则不会打印任何内容。

您可以通过使用script实用程序来欺骗此检查,该实用程序将终端会话或命令记录到文件中。所以在你的情况下做

script --return --command 'git bundle create bundle.out --all' bundle.log 

而你将在文件bundle.log输出。如果你再看看它,你也会看到为什么这个支票在那里。 (扰流板:这是定期更新,覆盖进度信息,这当然不能正常工作,如果你没有一个TTY看这个。)

免责声明:这个答案适用于* nix系统也适用于Windows上的Cygwin。我不知道有关Windows的普通Git,script实用程序在默认情况下可能不可用,您可能必须搜索Windows端口或等效项,或者使用Cygwin来执行此操作。

+0

谢谢,我不知道TTY的“要求”。当然'脚本'不存在于一个普通的Windows环境中,但至少现在我知道了。 – Shalen

相关问题