In my profile, I've customised the prompt via the prompt function to embed git branch information:
function prompt
{
$prefix = ""
if ((test-path ".git") -or (test-path ".gitdir") -or ((git rev-parse --is-inside-work-tree 2> $null) -eq "true")) {
$prefix = "[git:" + (& git symbolic-ref --short HEAD) + "]"
}
write-host "PS $prefix $(get-location) >" -nonewline -foregroundcolor DarkMagenta
return " "
}
The problem however is that when I'm outside of a git tree, the git rev-parse part of the check inserts an error into $error even though I'm redirecting errors to $null.
This means that $error gets polluted with the following error, as it is generated every time the prompt renders:
git : fatal: Not a git repository (or any of the parent directories): .git
At C:\temp\prompt.ps1:4 char:64
+ ... ".gitdir") -or ((git rev-parse --is-inside-work-tree 2> $null) -eq "t ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (fatal: Not a gi...ectories): .git:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
Running interactively I've noticed that the 2> $null does suppress the error to the console, but the error still appears in $error:
PS C:\temp> $error
PS C:\temp> git rev-parse --is-inside-work-tree 2> $null
PS C:\temp> $error
git : fatal: Not a git repository (or any of the parent directories): .git
At line:1 char:1
+ git rev-parse --is-inside-work-tree 2> $null
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (fatal: Not a gi...ectories): .git:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
PS C:\temp>
I've tried wrapping the command in try {...} catch {}, and also using invoke-command with an erroraction of ignore, both with no luck:
PS c:\temp> $error.clear()
PS c:\temp> $error
PS c:\temp> invoke-command -scriptblock { git rev-parse --is-inside-work-tree 2> $null } -erroraction ignore
PS c:\temp> $error
git : fatal: Not a git repository (or any of the parent directories): .git
At line:1 char:31
+ ... d -scriptblock { git rev-parse --is-inside-work-tree 2> $null } -erro ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (fatal: Not a gi...ectories): .git:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
PS c:\temp> $error.clear()
PS c:\temp> $error
PS c:\temp> try { git rev-parse --is-inside-work-tree 2> $null } catch { }
PS c:\temp> $error
git : fatal: Not a git repository (or any of the parent directories): .git
At line:1 char:7
+ try { git rev-parse --is-inside-work-tree 2> $null } catch { }
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (fatal: Not a gi...ectories): .git:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
PS c:\temp>
How can I suppress this error from adding to $error so it stays clean?
2> $Nullto2>$Nullit seems to work for me. note the removal of the space between the>and the$. [grin]git rev-parse --is-inside-worktree 2> $Null] on mywin7, ps5.1, git version 2.21.0.windows.1setup, the error is suppressed.