Sha*_*tin 11 git powershell powershell-ise powershell-3.0
在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
Run Code Online (Sandbox Code Playgroud)
这不是一个主要问题,因为git checkout
仍然有效.但这很烦人,所以我想知道为什么ISE会在标准的PowerShell没有时抱怨,更重要的是,我们怎样才能防止这种烦恼.
我看过为什么Powershell ISE显示Powershell控制台没有显示的错误?,这解释了ISE只是显示正常shell正在经历的内容.这个答案并不能解释如何平息这种烦人的行为.
有几种方法可以避免这些错误,它们看起来或感觉都不"天然".第一个使用错误流重定向和一些错误的逻辑:
$out = git ? 2>&1
if ($?) {
$out
} else {
$out.Exception
}
Run Code Online (Sandbox Code Playgroud)
第二个依赖于ErrorAction,它仅适用于PowerShell结构,因此我们需要先构建一个:
& {
[CmdletBinding()]
param()
git ?
} -ErrorAction SilentlyContinue -ErrorVariable fail
if ($fail) {
$fail.Exception
}
Run Code Online (Sandbox Code Playgroud)
在我的ISEGit模块中,我使用后者来避免错误记录以不受控制的方式"泄漏"给最终用户.
最后你可以通过确保最后可以输入一个字符串来"修复它"(好吧,排序......)
"$(git ? 2>&1 )"
Run Code Online (Sandbox Code Playgroud)
或者我会投反对票,因为它会让你不知道任何实际错误,将全局设置$ErrorActionPreference
为SilentlyContinue
- 尽管这与重定向错误流没有什么不同$null
.
它看起来像你现在可以重定向错误输出到整个PowerShell脚本标准输出通过简单的设置环境变量:
$env:GIT_REDIRECT_STDERR = '2>&1'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3589 次 |
最近记录: |