我相當有信心,這是要麼不可能,要麼我失去了一個顯而易見的選擇,但諮詢grit's Git class後,主旨鏈接in this SO post,另砂礫標記問題上的SO,我來了空白。我可以得到以砂礫形式發出的git clone命令的輸出到stdout嗎?
我用砂礫一系列的安裝我的應用程序rake任務。其中一項任務克隆了一些存儲庫。
使用在linked gist作爲示例的代碼,這是GIT中克隆在砂礫的輸出(應IRB一個gem install grit
後工作開箱,紅寶石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"
我問題是:我能否恢復克隆命令的標準輸出的其餘部分,最好在克隆實際發生時進行? 「克隆到/tmp/aws...n」是輸出的第一行,並且僅在克隆完成時才返回。
的第二個問題是:如果這是不可能恢復克隆的進度,而它與砂礫發生,有另一種方式來顯示,而它發生的命令的進展如何?我擔心的是我們的一些存儲庫非常大,我想給rakefile的用戶一些東西,所以他們不會斷定腳本在試圖與遠程進行通信時掛起。
僅供參考,混帳克隆命令的「正常」了放是:
$ 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
需要一個保持最新版本的寶石,自2011年1月23日起至今未更新,截至今天,2011年9月26日(非常感謝Daniel Brockman在下面指出)。你必須clone it from github和build it manually.
SOLUTION
克隆傳遞正確的信息給標準錯誤,如果你給它:process_info
和:progress
(我原來的例子失敗了,因爲我有一個過時的寶石)。以下是工作代碼。至少在這個時候,您需要根據上述原因手動構建寶石。
> 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.
嘗試運行'git的克隆的git://github.com/cookbooks/aws.git的/ tmp /測試AWS 2>的/ dev/null',你會看到它的輸出部分要標準錯誤。 –
沒有骰子。這命令我根本沒有輸出。還運行了'repo.fetch({:process_info => true})'(忘了先運行它)並得到'[0,「,」「]''。 – Christopher
那麼,當'git fetch'無關時應該發生這種情況。 –