Вопрос по powershell, visual-studio, nuget, visual-studio-2012, git – PowerShell отображает некоторые результаты команды git как ошибку в консоли, даже если операция прошла успешно

9

Когда я выполняю команды Git в PowerShell, все работает отлично, за исключением одного небольшого различия между консолью PowerShell и консолью NuGet. Вывод из & quot;git push& Quot; отображается красным текстом ошибки в окне NuGet, но хорошо отображается в окне PowerShell.

Вот видео, показывающее разницу. & Quot;git push& Quot; отображает результаты в виде ошибки в консоли диспетчера пакетов. Операция сработала, просто раздражает, что вывод операции отображается как ошибка.

Смотреть видео

Спасибо за супер соответствующее редактирование, Microsoft. Chev

Ваш Ответ

2   ответа
25

git push отправляет вывод в stderr, а не в stdout. УвидетьВот, Вот.

Powershell.exe в качестве хоста не беспокоится, когда нативные инструменты отправляют вывод в stderr, поскольку это довольно распространенный способ печати не только сообщений об ошибках, но и сообщений о состоянии и прочего. Например, попробуйте запустить что-то совершенно фиктивное

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

Findstr отправляет сообщения об ошибках в stderr, поэтому Powershell.exe не знает, как назначить эту «ошибку». вывод в вашу переменную, но это также не волнует.

Хозяин менеджера пакетов NuGet, с другой стороны, не настолько умен в этом отношении. При запуске любого собственного инструмента этот хост интерпретирует что-либо в stderr как действительно ошибку. Таким образом вы получаете красный текст, диагностические сообщения и т. Д. Попробуйте то же самоеfindstr Пример выше в личку, вы увидите полные ошибки.

Пара обходных путей / предложений:

Use the --porcelain parameter, which causes output to go to stdout, not stderr. Set $errorView = 'CategoryView' which will at least minimize the error messages, though not remove them Redirect stderr and do a plain console write like this: git push 2>&1 | write-host
--porcelain также, кажется, неизвестная опция для меня также на git версии 2.12.0.windows.1 :(
цитата из этой первой ссылки ...In general, any program or script is buggy if it assumes that some output that are emitted to the standard error output from programs it invokes indicates an error ... SMH
Ссылка для & quot; stdout, а не stderr. & Quot; кажется "сломанным". Для Windows--porcelain это неизвестный вариант. Но передача вывода в Write-Host работает! Спасибо! :)
2

вы можете создать cmd-файл со следующим содержимым:

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

И зарегистрируйте его как псевдоним (внутри вашего профиля):

Set-Alias git "git.cmd"

Похожие вопросы