2012-10-05 16 views
8

PowerShellでGitコマンドを実行すると、PowerShellコンソールとNuGetコンソールの小さな違いを除いて、 「git push」の出力は、NuGetウィンドウに赤色のエラーテキストで表示されますが、PowerShellウィンドウに正常に表示されます。操作が成功したにもかかわらず、PowerShellはいくつかのgitコマンドの結果をコンソールにエラーとして表示します。

ここにその違いを示すビデオがあります。 "git push"は、その結果をパッケージマネージャコンソールにエラーとして表示します。操作はうまくいきました。操作からの出力がエラーとして表示されるのは面倒です。

See the video

+0

マイクロソフトの関連性の高い編集に感謝します。 – Chev

答えて

1

この問題を解決し、することができますPowerShellのISEで作業を保つために次の内容のCMDファイルを作成します。

@echo off 
git.exe %1 %2 %3 %4 %5 %6 %7 %8 %9 2>&1 

をAND(あなたのプロフィールの内側)の別名として登録:

Set-Alias git "git.cmd" 
21

根本原因:git pushはない標準出力、標準エラー出力に出力を送信しています。 here,hereを参照してください。

ネイティブツールが出力をstderrに送信すると、Powershell.exeがホストとして気になることはありません。これは、エラーメッセージだけでなくステータスメッセージなどを印刷するためのやや一般的な方法です。例えば、

PS C:\> $result = findstr.exe q w e r t y 

のような完全に偽の何かを実行してみたpowershell.exeがあなたの変数にその「エラー」の出力を割り当てることがない知っているのでをFindstrは、標準エラー出力にエラーメッセージを送信していますが、それはまた、フリークアウトしません。

NuGetパッケージマネージャーホストは、この点では賢明ではありません。任意のネイティブツールを実行すると、このホストはstderr内の何かを真にエラーとして解釈します。したがって、あなたは赤いテキスト、診断メッセージなどを取得します。上のPMと同じfindstrの例を試してみましょう。完全なエラーが表示されます。

回避策/提案のカップル:

  • 出力はstdout, not stderrに行くことになり--porcelainパラメータを使用します。
  • 彼らに
  • リダイレクト標準エラー出力を削除して、このようなプレーンなコンソールの書き込みを行うにはないが、少なくとも、エラーメッセージを最小化する設定$errorView = 'CategoryView'git push 2>&1 | write-host
+1

"stdout、not stderr"のリンク。 "壊れている"ようです。 Windowsの場合、 ' - porcelain'は未知のオプションです。しかし、出力をWrite-Hostにパイプするのは効果的です!ありがとうございました! :) –

+0

' - porcelain'もgitバージョン2.12.0.windows.1で私にとっては未知のオプションと思われます。 – Luke

関連する問題