4

我相当有信心这是不可能的,或者我错过了一个明显的选择,但是在咨询了grit 的 Git 课程、这篇 SO 帖子中链接的要点以及关于 SO 的其他 grit 标记的问题之后,我一无所获。

我将 grit 用于安装我的应用程序的一系列 rake 任务。其中一项任务克隆了一些存储库。

链接 gist中的代码为例,这是 git cloning in grit 的输出(应该gem install grit在 irb、ruby 1.9.2 之后开箱即用):

> require 'grit'
> gritty = Grit::Git.new('/tmp/filling-in')
=> #<Grit::Git:0x007f93ae105df8 @git_dir="/tmp/filling-in", @work_tree="/tmp/filling-in", @bytes_read=0>
> gritty.clone({:quiet => false, :verbose => true, :progress => true, :branch => '37s', :timeout => false}, "git://github.com/cookbooks/aws.git", "/tmp/aws") 
=> "Cloning into /tmp/aws...\n" 

我的问题是:我可以恢复克隆命令的标准输出的其余部分,最好是在克隆实际发生时?“Cloning into /tmp/aws...\n”是输出的第一行,仅在克隆完成后返回。

第二个问题是:如果在使用 grit 时无法恢复克隆的进度,是否有另一种方法可以在命令发生时显示命令的进度?我担心我们的一些存储库非常大,我想给我的 rakefile 的用户一些东西,这样他们就不会断定脚本在尝试与远程通信时只是挂起。

作为参考, git clone 命令的“正常”输出将是:

$ git clone git://github.com/cookbooks/aws.git /tmp/test-aws
Cloning into /tmp/test-aws...
remote: Counting objects: 12364, done.
remote: Compressing objects: 100% (3724/3724), done.
remote: Total 12364 (delta 7220), reused 12330 (delta 7203)
Receiving objects: 100% (12364/12364), 5.92 MiB | 70 KiB/s, done.
Resolving deltas: 100% (7220/7220), done.

快速说明:此处描述的一些功能,即:process_info需要最新版本的 gem,自 2011 年 1 月 23 日以来,截至 2011 年 9 月 26 日,该版本尚未更新(非常感谢 Daniel Brockman 指出出来,下面)。您必须从 github 克隆它手动构建它。

解决方案

:process_info如果你给它并且克隆将正确的信息传递给stderr :progress(我原来的例子失败了,因为我有一个过时的gem)。以下是工作代码。由于上述原因,您需要手动构建 gem,至少此时是这样。

> require 'grit'
> repo = Grit::Git.new('/tmp/throw-away')
> process = repo.clone({:process_info => true, :progress => true, :timeout => false}, 'git://github.com/cookbooks/aws.git', '/tmp/testing-aws-again')  # output supressed
> print process[2]   # i.e. the stderr string of the output
remote: Counting objects: 12364, done.
remote: Compressing objects: 100% (3724/3724), done.
remote: Total 12364 (delta 7220), reused 12330 (delta 7203)
Receiving objects: 100% (12364/12364), 5.92 MiB | 801 KiB/s, done.
Resolving deltas: 100% (7220/7220), done.
4

1 回答 1

2

你只得到第一行输出的原因是它的其余部分被发送到stderr,而不是stdout。:process_info您可以通过一个选项来获取退出状态、stdout 和 stderr。请参阅https://github.com/mojombo/grit/blob/master/lib/grit/git.rb#L290

于 2011-09-26T22:16:04.323 回答