13

PowerShell で Git コマンドを実行すると、PowerShell コンソールと NuGet コンソールのわずかな違いを除いて、すべてがうまく機能します。" " からの出力はgit push、NuGet ウィンドウでは赤いエラー テキストで表示されますが、PowerShell ウィンドウでは問題なく表示されます。

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

ビデオを見る

4

2 に答える 2

30

根本原因: git pushstdout ではなく、stderr に出力を送信しています。ここここを参照してください。

ホストとしての Powershell.exe は、ネイティブ ツールが stderr に出力を送信するときに心配することはありません。これは、エラー メッセージだけでなく、ステータス メッセージやその他のものを出力するためのやや一般的な方法であるためです。たとえば、次のようなまったく偽の何かを実行してみてください

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

Findstr はエラー メッセージを stderr に送信しているため、Powershell.exe はその「エラー」出力を変数に割り当てないように認識していますが、問題が発生することもありません。

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

いくつかの回避策/提案:

  • 出力をstderr ではなく stdout に送る--porcelainパラメーターを使用します。
  • $errorView = 'CategoryView'エラーメッセージを削除するわけではありませんが、少なくともエラーメッセージを最小限に抑えるように設定します
  • stderr をリダイレクトし、プレーンなコンソール書き込みを次のように行います。 git push 2>&1 | write-host
于 2012-10-08T21:47:42.980 に答える
2

これを修正して Powershell ISE で作業を続けるには、次の内容の cmd ファイルを作成します。

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

そして、エイリアスとして登録します(プロファイル内):

Set-Alias git "git.cmd"
于 2015-10-29T11:42:21.417 に答える