git - PowerShell - 捕获 Git 命令的 STDERR 输出

标签 git powershell logging error-handling stderr

问题

我正在尝试将 STDERR 输出捕获到日志文件中;但是,我一直遇到一些严重的不一致问题,这让我的任务变得更加困难。

首先,我将 ErrorActionPreference 设置为“停止”,这可能是我遇到的部分问题。

其次,我在下面显示的代码中为每个 git 命令尝试了两种变体:

变体 01

& git add $path2File 2>&1 | Out-File "$LogPath\$tmpLogName" -Append
& git commit -m "Some logical update message" 2>&1 | Out-File "$LogPath\$tmpLogName" -Append
& git status 2>&1 | Out-File "$LogPath\$tmpLogName" -Append
& git push 2>&1 | Out-File "$LogPath\$tmpLogName" -Append

变体 02

& git add $path2File 2>&1 >> "$LogPath\$tmpLogName" -Append
& git commit -m "Some Logical update message" 2>&1 >> "$LogPath\$tmpLogName" -Append
& git status 2>&1 >> "$LogPath\$tmpLogName" -Append
& git push 2>&1 >> "$LogPath\$tmpLogName" -Append

还有其他几个变体,其中我混淆了哪个命令使用哪个变体,具体取决于我遇到的常见问题。

我遇到的主要问题是:

1) 每当遇到 STDERR 输出时,无论消息是什么,都将其视为终止错误。

2) 由于多种原因,我尝试创建自定义 Try/Catch 语句的尝试失败了。成功的 STDERR 消息的退出代码并不总是相同的。由于消息并不总是使用相同或相似的消息,因此无法对警告以外的任何内容使用纯文本匹配。

注意:除非绝对必要,否则我尝试在不更改 ErrorActionPreference 的情况下执行此操作。

问题

有谁知道如何处理记录 git 命令的 STDERR 消息,以便它始终记录响应而不引发终止错误,真正的严重错误除外?

最佳答案

看来这次我要回答我自己的问题了。

使用 git-scm.com/docs我了解到一些 git 命令有一个 --porcelain 选项,它允许我将输出转换为机器可读格式并将它们通过管道传输到输出。然后,根据命令使用 >>>*>> 的组合,我想出了以下内容:

& git checkout --track $branch >> $logFilePath

# some set of actions

& git add . *>> $logFilePath
& git commit -m "some automated update message" *>> $logFilePath
& git status --porcelain >> $logFilePath
& git push --porcelain >> $logFilePath

这让我能够在没有错误终止错误的情况下获得我想要记录的信息,如果我需要屏蔽任何东西(IP 地址、PI 等),我可以在它被记录或显示之前这样做。

如果不需要这样做,使用 Tee-Object 也非常有助于实现预期的结果,同时仍然适本地触发任何错误,而不是仅仅因为它来了而生成终止错误来自 STDERR

关于git - PowerShell - 捕获 Git 命令的 STDERR 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47402329/

相关文章:

java - 明确设置 apache HttpClient 日志级别

git 克隆 https/ssl 错误

git - 查看移动文件的 Git 历史记录

powershell - 删除目录,不管 260 个字符的限制

c# - 以空值将Powershell内容保存为JSON

python - 如何将 xmlrpc 服务器的日志输出重定向到某个文件

ios - Swift - 将控制台日志重定向到文档文件夹

git - Git-Flow 的标签前缀功能的值(value)和用途?

git - 为什么 git rev-parse --short 使用非默认长度?

string - 命令字符串中带有 & 符号的 PowerShell Invoke-Expression