No que diz respeito ao Powershell, é o comportamento correto.
Infelizmente (pelo menos na minha opinião), o git gera muitas informações para stderr
mesmo quando não há nenhum erro. Por exemplo, git checkout -b somenewbranch
emitirá itens como listas de arquivos modificados para stdout, mas a mensagem Switched to new branch somenewbranch
(que eu acho que é a mais relevante) para stderr
.
Uma das formas mais comuns de lidar com isso é redirecionar stderr
output para stdout
, por exemplo:
git rebase master 2>&1
Isso é suficiente para a maioria dos casos de uso que eu já vi. Se você quiser fazer algo com a própria saída textual, precisará ir um pouco mais longe, pois o Powershell armazenará as linhas originárias do stderr como RemoteException
em vez de string
. Um breve exemplo de como você pode lidar com algo que precisa registrar a saída para o console:
$result = Invoke-Expression "& git checkout -b somefeaturebranch 2>&1"
$output = ""
foreach($line in $result)
{
$val = ""
if($line.GetType().Name -eq "ErrorRecord")
{
$val = $line.Exception.Message
}else{
$val = $line
}
$output = "$output'r'n$val"
}
Write-Host $output