Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将git捆绑包创建输出重定向到日志文件_Git_Batch File - Fatal编程技术网

将git捆绑包创建输出重定向到日志文件

将git捆绑包创建输出重定向到日志文件,git,batch-file,Git,Batch File,我正在使用Windows7,32位,git版本2.12.0.Windows.1 我正在编写一个简单的批处理脚本,将git存储库捆绑到一个唯一的文件中。我想将命令的输出重定向到一个日志文件,然后我可以检查它,但是我遇到了一个无法理解的行为 在任何git存储库中,如果我运行以下命令: git bundle create bundle.out --all > bundle.log 我希望命令的输出被重定向到文件bundle.log。但是,在运行该命令后,将创建文件bundle.log,但该文件

我正在使用Windows7,32位,git版本2.12.0.Windows.1

我正在编写一个简单的批处理脚本,将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,创建了两个文件bundle.log和error.log,但它们是空的。奇怪的是,控制台上没有显示任何输出。所以,我的问题是,这个输出在哪里消失

为了比较,我尝试了另一个“类似”命令,即:

git bundle verify bundle.out 1> stream1.log 2> stream2.log
应用于之前创建的bundle,其行为是我所期望的:stream1.log包含引用列表等,stream2.log包含“bundle.out正常”


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

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

您可以使用将终端会话或命令记录到文件中的
脚本
实用程序来欺骗此检查。对你来说,你应该这样做

script --return --command 'git bundle create bundle.out --all' bundle.log
您将在文件
bundle.log
中获得输出。如果你再看一下,你也会明白为什么会有这张支票。(扰流板:这是定期更新和覆盖的进度信息,如果您不在TTY中观看,这当然不能正常工作。)


免责声明:此答案适用于*nix系统,也适用于Windows上的Cygwin。我不知道普通Git for Windows,默认情况下,
脚本
实用程序可能不可用,您可能需要搜索Windows端口或等效端口,或者使用Cygwin来完成此操作。

stderr流不再是
Git捆绑包
的唯一输出

在Git 2.25(2020年第1季度)中,“Git bundle
”已经学会使用解析选项API,并且作为其一部分,更好地管理其重定向

验证“已学习”
“安静”
“和“
创建”
“已学习”选项以控制进度输出

参见(2019年11月10日)作者。
(于2019年12月1日合并)

:进度输出控制 支持git bundle的
create
子命令中的pack对象的进度输出选项。
最值得注意的是,这是一个错误

这就是说,现在的计划包括:

--进度

除非指定了
-q
,否则当标准错误流连接到终端时,默认情况下会在标准错误流上报告进度状态。
即使标准错误流未定向到终端,此标志也会强制执行进度状态

--所有进度

如果指定了
--stdout
,则在对象计数和压缩阶段显示进度报告,但在写出阶段禁用。
原因是在某些情况下,输出流直接链接到另一个命令,该命令可能希望在处理传入的包数据时显示其自身的进度状态。
此标志类似于
--progress
,不同之处在于,即使使用了
--stdout
,它也会强制写出阶段的进度报告

——暗示的所有进度

这用于在激活进度显示时暗示所有进度。
--all progress
不同,此标志本身并不强制显示任何进度


似乎解释了行为……谢谢,我不知道TTY的“要求”。当然,
script
在普通的Windows环境中并不存在,但至少现在我知道了。这很好用,如果git版本足够新的话,应该优先使用。我用它将输出重定向到一个文件,现在我也明白了为什么默认设置为“非终端不写任何东西”:-)