PowerShell zeigt einige Git-Befehlsergebnisse als Fehler in der Konsole an, obwohl der Vorgang erfolgreich war

8

Wenn ich Git-Befehle in PowerShell ausführe, funktioniert alles bis auf einen kleinen Unterschied zwischen der PowerShell-Konsole und der NuGet-Konsole. Die Ausgabe von " git push " wird im NuGet-Fenster in rotem Fehlertext angezeigt, im PowerShell-Fenster jedoch in Ordnung.

Hier ist ein Video, das den Unterschied zeigt. " git push " zeigt seine Ergebnisse als Fehler in der Paketmanagerkonsole an. Die Operation hat funktioniert, es ist nur ärgerlich, dass die Ausgabe der Operation als Fehler angezeigt wird.

Siehe das Video

    
Chev 05.10.2012, 17:32
quelle

2 Antworten

1

Um dies zu beheben und weiter mit Powershell ISE zu arbeiten, können Sie eine cmd-Datei mit dem folgenden Inhalt erstellen:

%Vor%

Und registriere es als Alias ​​(in deinem Profil):

%Vor%     
Console 29.10.2015, 11:42
quelle
22

Ursache: git push sendet die Ausgabe an stderr, nicht an stdout. Siehe hier , hier .

Powershell.exe als Host macht sich keine Sorgen, wenn native Tools eine Ausgabe an stderr senden, da dies eine etwas gewöhnliche Art ist, nicht nur Fehlermeldungen, sondern auch Statusmeldungen und anderes Zeug zu drucken. Versuchen Sie beispielsweise, etwas völlig Falsches wie

auszuführen %Vor%

Findstr sendet Fehlermeldungen an stderr, so dass Powershell.exe diese "error" -Ausgabe nicht Ihrer Variablen zuweisen kann, aber auch nicht ausflippt.

Der NuGet-Paketmanager-Host dagegen ist in dieser Hinsicht nicht so intelligent. Wenn ein natives Werkzeug ausgeführt wird, interpretiert dieser Host alles in stderr als einen echten Fehler. So erhalten Sie den roten Text, Diagnosemeldungen, usw. Versuchen Sie das gleiche findstr Beispiel oben in der PM, Sie werden vollständige Fehler sehen.

Einige Problemumgehungen / Vorschläge:

  • Verwenden Sie den Parameter --porcelain , wodurch die Ausgabe an stdout, nicht stderr gesendet wird.
  • Setzen Sie $errorView = 'CategoryView' , was zumindest die Fehlermeldungen minimiert, aber nicht entfernt
  • Leiten Sie stderr um und schreiben Sie eine einfache Konsole wie folgt: git push 2>&1 | write-host
latkin 08.10.2012 21:47
quelle