2012-10-05 23 views
8

Cuando ejecuto los comandos de Git en PowerShell todo está funcionando muy bien, excepto una pequeña diferencia entre la consola y la consola de PowerShell NuGet. La salida de un "git push" aparece en el texto de error rojo en la ventana NuGet pero muestra bien en la ventana de PowerShell.PowerShell muestra algunos resultados de los comandos git como error en la consola a pesar de que la operación se ha realizado correctamente

Aquí hay un video que muestra la diferencia. "git push" muestra sus resultados como un error en la consola del administrador de paquetes. La operación funcionó, es molesto que la salida de la operación se muestre como un error.

See the video

+0

Gracias para la edición súper relevante, Microsoft. – Chev

Respuesta

1

Para solucionar este problema y seguir trabajando con PowerShell ISE se puede crear un archivo cmd con el siguiente contenido:

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

y registrarlo con el alias (dentro de su perfil):

Set-Alias git "git.cmd" 
21

causa raíz: git push está enviando la salida a stderr, no la salida estándar. Ver here, here.

Powershell.exe como anfitrión no se preocupa cuando las herramientas nativas envían resultados a stderr, ya que esta es una forma bastante común de imprimir no solo mensajes de error sino mensajes de estado y otras cosas. Por ejemplo, intente ejecutar algo totalmente falso, como

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

Findstr es el envío de mensajes de error en stderr, por lo Powershell.exe sabe que no debe asignar dicha salida de "error" a la variable, sino que también no se asuste.

El anfitrión NuGet gestor de paquetes, por otro lado, no es tan inteligente en este sentido. Al ejecutar cualquier herramienta nativa, este host interpreta cualquier cosa en stderr como un verdadero error. De este modo, obtiene el texto rojo, los mensajes de diagnóstico, etc. Pruebe el mismo ejemplo anterior findstr en el PM, verá errores completos.

Un par de soluciones y/o sugerencias:

  • utilizar el parámetro --porcelain, lo que hace que la salida para ir a stdout, not stderr.
  • Conjunto $errorView = 'CategoryView' que al menos minimizar los mensajes de error, aunque no les quite
  • stderr redirección y hacer una escritura de la consola sencilla como esto: git push 2>&1 | write-host
+1

El enlace para "stdout, not stderr." parece "roto". Para Windows, '--porcelain' es una opción desconocida. Pero conectar la salida a Write-Host funciona. ¡Gracias! :) –

+0

'--porcelain' También parece ser una opción desconocida para mí también en la versión git 2.12.0.windows.1 :( – Luke

Cuestiones relacionadas