在 PowerShell 中,git checkout
运行时没有任何错误消息。在 ISE 中,虽然 git checkout
仍然有效,但 ISE 会给出一条错误消息。
> git checkout master
Your branch is ahead of 'origin/master' by 3 commits.
(use "git push" to publish your local commits)
git : Switched to branch 'master'
At line:1 char:1
+ git checkout master
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (Switched to branch 'master':String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
这不是主要问题,因为 git checkout
仍然有效。不过,这很烦人,所以我想知道为什么 ISE 会提示而标准 PowerShell 不会提示,重要的是,我们如何才能避免这种烦恼。
我看过Why is Powershell ISE showing errors that Powershell console does not show? ,这说明 ISE 只是显示普通 shell 所经历的情况。该答案并未解释如何平息这种烦人的行为。
最佳答案
有几种方法可以避免这些错误,它们看起来或感觉起来都不“自然”。 第一个使用错误流重定向和一些错误逻辑:
$out = git ? 2>&1
if ($?) {
$out
} else {
$out.Exception
}
第二个取决于 ErrorAction,它仅适用于 PowerShell 构造,因此我们需要先构建一个:
& {
[CmdletBinding()]
param()
git ?
} -ErrorAction SilentlyContinue -ErrorVariable fail
if ($fail) {
$fail.Exception
}
在我的ISEGit模块我使用后者来避免错误记录以不受控制的方式“泄漏”给最终用户。
最后你可以通过确保你可以在最后一个字符串来“修复它”(好吧,排序......):
"$(git ? 2>&1 )"
或者我会投票反对的东西,因为它会让你不知道任何实际的错误,将全局 $ErrorActionPreference
设置为 SilentlyContinue
- 尽管这与将错误流重定向到 $null
没有区别。
关于git - PowerShell ISE 在 git checkout 上抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26872205/