2013-08-01 19 views
7

git gcをすべてのreposで実行するcrontabに@dailyというジョブがあります。 ジョブのログファイルを設定しようとしていますが、I/Oリダイレクトでは探している結果が得られません。私は空白のファイルを取得します。'git gc'の出力をリダイレクトしようとしています

私はいつもすべて>2>&1などを成功させました。

git gcは、コンソールに出力を直接スローし、stdout/stderrをバイパスする出力手順にncursesを使用していると私に言いました。

私は正しい方向に向いていますか?

答えて

6

あなたはこれを試すことができます。

script -q -c 'git gc' > log

するか、この(より読みやすい出力付き):

script -q -c 'git gc' | sed 's/\r.*//g' > log

12

それは、ncursesを(一般的に引き継ぐのncursesを使用するプログラムを使用していません画面全体)。

strace -p -o git-gc.strace git gc 

を実行

は進行メッセージを標準エラー出力(ファイルディスクリプタ2)に書かれていることを示している - しかし、標準エラー出力がttyでない場合、彼らは無効になります。あなたは

git gc 2>some_file 

を実行する場合git gcが全く進行状況メッセージを生成しないので、それではsome_fileは、空になります。

ソースコード(builtin/gc.c)を見ると、--quietコマンドラインオプションで設定されていますquietオプションがあります:

git gc --quiet 

は、私は標準エラー出力がある場合にquietをオンコードを発見していませんないttyのが、私のような、Gitのソースの他の場所で同様のコードを参照してください。

quiet = !isatty(2); 

をオンにするコマンドラインオプションはありませんオプションオフ

git gcの進捗状況をキャプチャする場合は、stderrをttyに向けて実行していることを確認する必要があります。

some guy's answerがこれを行う方法の1つを提供します。

しかし、コードは端末に書き込んでいる場合にのみ進捗メッセージを生成するため、実際にメッセージをキャプチャする必要があるかどうかを検討することがあります。彼らは救われるようには設計されておらず、それほど有用ではないかもしれません。

あなたはgitのソースを自分で調べて(そして、あなたは十分にやる気なら、書き込まれるように進行メッセージを強制するためにそれらをハック)する場合:

git clone git://git.kernel.org/pub/scm/git/git.git 
関連する問題