将git bundle创建输出重定向到日志文件

时间:2017-03-06 14:46:25

标签: git batch-file

我正在使用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的输出重定向到日志文件?

2 个答案:

答案 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 e0eba64commit 79862b6commit 73c3253Robin H. Johnson (robbat2)(2019年11月10日)。
(由Junio C Hamano -- gitster --commit ca5c8aa中合并,2019年12月1日)

  

bundle-create:进度输出控制

     

支持git-bundle的create子命令中pack-object的进度输出选项。
  最值得注意的是,此provides --quietrequested on the git mailing list

这意味着git bundle documentation现在包括:

  

--progress

     

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

     

--all-progress

     

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

     

--all-progress-implied

     

这用于表示每当激活进度显示时的--all-progress
  与--all-progress不同,此标志实际上不会单独强制显示任何进度。