git - PowerShell ISE 在 git checkout 上抛出错误

标签 git powershell powershell-3.0 powershell-ise

在 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/

相关文章:

c# - 如何从 github 运行 ASP.NET web api

regex - 解释 gitignore 模式匹配

GitPython 通过 sha 获取树和 blob 对象

powershell - 从文本文件中排除 HTML 注释

powershell - 如果 Get-Member 未列出哈希表 .Get_Item() 和 .Set_Item() 如何工作?

git 预提交钩子(Hook) : trigger only to actual to be commited code?

powershell - Azure 应用服务扩展 powershell

xml - 使用PowerShell替换嵌套XML中的值

powershell - 如何使用 powershell 将 "\"替换为 "\\"?

powershell - 来自导入模块的函数在 powershell 脚本中不可用