głównej przyczyny: git push
wysyła wyjście stderr, nie stdout. Zobacz here, here.
Powershell.exe jako host nie martwi się, gdy rodzime narzędzia wysyłają dane wyjściowe na stderr, ponieważ jest to dość popularny sposób drukowania nie tylko komunikatów o błędach, ale także komunikatów o stanie i innych rzeczy. Na przykład, spróbuj uruchomić coś zupełnie fałszywe jak
PS C:\> $result = findstr.exe q w e r t y
findstr wysyłające komunikaty o błędach na stderr, więc powershell.exe nie wie przypisać tę „error” wyjście do zmiennej, ale to też nie freak out.
Z drugiej strony host menedżera pakietów NuGet nie jest tak inteligentny pod tym względem. Podczas uruchamiania dowolnego narzędzia natywnego host interpretuje wszystko w stderr jako prawdziwy błąd. W ten sposób otrzymasz czerwony tekst, komunikaty diagnostyczne itp. Spróbuj tego samego przykładu findstr
powyżej w PM, zobaczysz pełne błędy.
Kilka Obejścia/sugestie:
- Użyj parametru
--porcelain
, co powoduje wyjście, aby przejść do stdout, not stderr.
- Set
$errorView = 'CategoryView'
które przynajmniej zminimalizować komunikaty o błędach, ale nie usunąć je
- przekierować stderr i zrobić zwykły zapis konsoli tak:
git push 2>&1 | write-host
Dzięki za bardzo trafną edycję, Microsoft. – Chev