当我在 PowerShell 中执行 Git 命令时,一切都很好,除了 PowerShell 控制台和 NuGet 控制台之间的一个小区别。“”的输出git push
在 NuGet 窗口中以红色错误文本显示,但在 PowerShell 窗口中显示正常。
这是一个显示差异的视频。" git push
" 在包管理器控制台中将其结果显示为错误。该操作有效,只是令人讨厌的是操作的输出显示为错误。
当我在 PowerShell 中执行 Git 命令时,一切都很好,除了 PowerShell 控制台和 NuGet 控制台之间的一个小区别。“”的输出git push
在 NuGet 窗口中以红色错误文本显示,但在 PowerShell 窗口中显示正常。
这是一个显示差异的视频。" git push
" 在包管理器控制台中将其结果显示为错误。该操作有效,只是令人讨厌的是操作的输出显示为错误。
根本原因:git push
将输出发送到标准错误,而不是标准输出。看这里,这里。
当本机工具将输出发送到 stderr 时,作为主机的 Powershell.exe 不会担心,因为这不仅是打印错误消息而且打印状态消息和其他内容的一种常见方式。例如,尝试运行一些完全虚假的东西,例如
PS C:\> $result = findstr.exe q w e r t y
Findstr 正在向 stderr 发送错误消息,因此 Powershell.exe 知道不将该“错误”输出分配给您的变量,但它也不会惊慌失措。
另一方面,NuGet 包管理器主机在这方面并不聪明。在运行任何本机工具时,此主机会将 stderr 中的任何内容解释为真正的错误。因此,您会看到红色文本、诊断消息等。findstr
在 PM 中尝试上面的相同示例,您将看到完整的错误。
一些解决方法/建议:
--porcelain
参数,这会导致输出转到stdout,而不是 stderr。$errorView = 'CategoryView'
至少会最小化错误消息,但不会删除它们git push 2>&1 | write-host
要解决此问题并继续使用 Powershell ISE,您可以创建一个包含以下内容的 cmd 文件:
@echo off
git.exe %1 %2 %3 %4 %5 %6 %7 %8 %9 2>&1
并将其注册为别名(在您的个人资料中):
Set-Alias git "git.cmd"