【问题标题】:PowerShell Capture Git OutputPowerShell 捕获 Git 输出
【发布时间】:2018-05-01 14:13:16
【问题描述】:

问题

我正在通过 PowerShell 运行一些 git 命令,但在捕获输出时遇到问题。

在我尝试使用 Out-File 之前,我研究的许多方法都无法捕获任何输出。不幸的是,尽管这对我来说效果很好,但我发现 git push 命令出了点问题,阻止我捕获输出......

我的代码如下:

git add . | Out-File $logFilePath -Append
git status . | Out-File $logFilePath -Append
git commit -m "Some Relevant update message" | Out-File $logFilePath -Append
git push origin $branchname | Out-File $logFilePath -Append

当我查看日志文件时,它会显示除git push 的输出之外的所有内容。所以在解决这个问题时,我从行中删除了| Out-File,并注意到即使输出窗口也不再显示git push 的输出。只有当我从所有 git 命令中完全删除 Out-File 时,我才能让输出再次按预期显示。不幸的是,这让我回到了原点。

问题

有谁知道如何使用 PowerShell 最好地捕获 git 命令的输出,或者可以指出我做错了什么?

【问题讨论】:

    标签: git powershell logging


    【解决方案1】:

    正如我解释的 herehere,Git 命令输出是在 stderr 上完成的,而不是在 stdout 上。

    所以在你的情况下,你需要管道 stderr。
    例如,参见“Redirection of standard and error output appending to the same log-file”。

    注意:with Git 2.16(Q1 2018),可以先尝试设置

     set GIT_REDIRECT_STDERR=2>&1
    

    然后stderr应该被重定向到stdout。

    在“PowerShell - Capturing STDERR Output for Git Commands”中,OP Brandon 指向--porcelain option of (for instance) git push

    & git status --porcelain >> $logFilePath
    & git push --porcelain >> $logFilePath
    

    它允许将输出转换为机器可读格式并将它们通过管道传输到输出。

    【讨论】:

    • 谢谢。这些都非常有用。我将对此进行一些尝试,以确保在关闭它之前我拥有我需要的所有信息。再次感谢您
    • 我想你不能再帮我一步吗?我将ErrorActionPreference 设置为Stop 并且我为捕获这些数据所做的每一次尝试(除了临时更改ErrorActionPreference 之外)都会在遇到stderr 时导致代码失败......有没有简单的方法确保代码不会因某些stderr 输出(警告、成功推送等)而失败,但在遇​​到真正的严重错误时仍会失败?
    • 抱歉耽搁了。我明天会看看,但您可能会添加一个更针对该特定问题的新问题。
    • 谢谢,但我一定会继续设置一个新问题
    猜你喜欢
    • 1970-01-01
    • 2018-05-04
    • 2012-05-10
    • 2010-10-29
    • 2018-06-09
    • 2012-11-22
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多