我很有信心这是不可能的,或者我错过了一个明显的选择,但是在咨询了grit's Git class,链接了in this SO post的要点,以及其他一些带粗砂标签的问题之后,我就变成了一个空白。
我正在使用grit完成一系列安装应用程序的rake任务。其中一个任务克隆了几个存储库。
以linked gist中的代码为例,这是grit中git克隆的输出(应该在irb,ruby 1.9.2中的agem install grit
之后开箱即用):
> 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"
我的问题是:我能恢复clone命令的stdout的其余部分吗,最好是在克隆实际发生的时候?“克隆到/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日,gem尚未更新(非常感谢daniel brockman在下面指出这一点)。你必须clone it from github和build it manually.解决方案
clone将正确的信息传递给stderr,如果您给它
:process_info
和: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.
最佳答案
您只得到第一行输出的原因是它的其余部分被发送到stderr,而不是stdout。有一个:process_info
选项可以通过它来获取退出状态stdout和stderr。参阅https://github.com/mojombo/grit/blob/master/lib/grit/git.rb#L290。