我正在使用Windows 7,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.log 和 error.log ,但它们都是空的。奇怪的是,控制台上没有显示任何输出。所以,我的问题是,这个输出在哪里消失了?
为了比较,我尝试了另一个“类似”命令,即:
git bundle verify bundle.out 1> stream1.log 2> stream2.log
应用于之前创建的捆绑包,行为是我期望的行为: stream1.log 包含refs等列表, stream2.log 包含“捆绑包”。 out是好的“。
我做错了什么?如何实现我的目标,即将git bundle create
的输出重定向到日志文件?
答案 0 :(得分:0)
textarea {
width:100%;
}
将其输出打印到stderr流。但是只有当stderr流是TTY时才会这样做,i。即基本上是一个交互式控如果不是,但有些管道或文件,则不会打印任何内容。
您可以使用记录终端会话或命令到文件的<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<table id="table" class="table table-bordered">
<thead>
<tr>
<th data-field="state" data-radio="true"></th>
<th data-field="name">Name</th>
<th data-field="starts">Stars</th>
<th data-field="forks">Forks</th>
<th data-field="description">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="radio" name="radioGroup"></td>
<td>
<a href="https://github.com/wenzhixin/bootstrap-table">bootstrap-table</a>
</td>
<td>526</td>
<td>122</td>
<td>An extended Bootstrap table with radio, checkbox, sort, pagination, and other added features. (supports twitter bootstrap v2 and v3)
</td>
</tr>
<tr>
<td><input type="radio" name="radioGroup" checked></td>
<td>
<a href="https://github.com/wenzhixin/multiple-select">multiple-select</a>
</td>
<td>288</td>
<td>150</td>
<td>A jQuery plugin to select multiple elements with checkboxes :)
</td>
</tr>
<tr>
<td><input type="radio" name="radioGroup"></td>
<td>
<a href="https://github.com/wenzhixin/bootstrap-show-password">bootstrap-show-password</a>
</td>
<td>32</td>
<td>11</td>
<td>Show/hide password plugin for twitter bootstrap.
</td>
</tr>
<tr>
<td colspan="12">
<textarea></textarea>
</td>
</tr>
</tbody>
</table>
实用程序来欺骗此检查。所以在你的情况下做
git bundle
您将在文件script
中输出。如果你再看一下,你也会看到为什么会有这种检查。 ( Spoiler:这是定期更新和覆盖的进度信息,如果您不在TTY中观看,这当然无法正常工作。)
免责声明:此答案适用于* nix系统以及Windows上的Cygwin。我不知道普通的Git for Windows,默认情况下script --return --command 'git bundle create bundle.out --all' bundle.log
实用程序可能无法在那里使用,您可能需要搜索Windows端口或等效工具或使用Cygwin来执行此操作。
答案 1 :(得分:0)
stderr流不再是git bundle
的唯一输出。
在Git 2.25(2020年第一季度)中,已经教“ git bundle
”使用解析选项API,并且作为其一部分,可以更好地管理其重定向。
“
>git bundle
验证”了解到“--quiet
”和“git bundle
create
”了解了用于控制进度输出的选项。
请参见commit e0eba64的commit 79862b6,commit 73c3253,Robin H. Johnson (robbat2
)(2019年11月10日)。
(由Junio C Hamano -- gitster
--在commit ca5c8aa中合并,2019年12月1日)
bundle-create
:进度输出控制支持git-bundle的
create
子命令中pack-object的进度输出选项。
最值得注意的是,此provides--quiet
为requested on the git mailing list。
这意味着git bundle
documentation现在包括:
--progress
:除非已指定
-q
,否则在连接到终端时,默认情况下会在标准错误流上报告进度状态。
即使标准错误流未定向到终端,该标志也会强制显示进度状态。
--all-progress
:如果指定
--stdout
,则在对象计数和压缩阶段将显示进度报告,但在写出阶段将禁止进度报告。
原因是在某些情况下,输出流直接链接到另一个命令,该命令可能希望在处理传入的包数据时显示其自身的进度状态。
该标志类似于--progress
,除了即使使用--stdout
也会强制执行写出阶段的进度报告。
--all-progress-implied
:这用于表示每当激活进度显示时的
--all-progress
。
与--all-progress
不同,此标志实际上不会单独强制显示任何进度。