【问题标题】:How to check if git pull is successful from Process.ExitCode如何从 Process.ExitCode 检查 git pull 是否成功
【发布时间】:2020-12-24 11:48:11
【问题描述】:

我正在使用ProcessInfo 打电话给git pull

我正在检查 ExitCode 以获取成功的所有命令。

因此,如果ExitCode 为 0,则命令运行成功,否则会出现错误。

一切正常,当它尝试执行git pull 并且存储库已经是最新的时会出现问题。 在这种情况下,git 认为它失败并返回ExitCode=1,但对我来说这是成功的,只是没有什么可以拉的。

有什么方法可以检查 pull 命令是否成功?

我想到了一种方法,如果我可以以某种方式运行命令来检查是否有任何要拉取的东西,如果该命令返回 true,那么我将执行拉取,否则不会

这篇文章提供了检查是否有任何东西可以拉取的选项 Check if pull needed in Git

如果有直接的方法可以单独处理 pull 或者在 pull 之前我应该​​检查什么,有人可以帮忙吗?

【问题讨论】:

  • 为什么不检查输出?
  • @John - 输出是一个字符串。我发现它不是检查字符串值的正确方法。
  • 也许您的 git 存储库有一个 API,您可以调用而不是使用命令行。由于 git pull 的结果被写入标准输出,读取响应的唯一方法是……作为字符串。

标签: c# git process git-pull exit-code


【解决方案1】:

不要在脚本中使用git pull

Git 通常将其命令分为管道命令旨在从脚本中使用,瓷器命令,旨在由人类经营。管道命令以可预测的方式运行并具有可靠的退出代码,并且在适当时产生或具有产生机器可读输出的选项。瓷器命令没有。一些命令,例如git status,可以以任何一种方式运行:git status --porcelain=v2 以“管道方式”运行git status1 Porcelain 命令也经常服从特定的用户配置控制,因此有不能保证运行相同命令的两个不同用户会获得相同的行为。

git pull 命令完全是瓷器,而不是管道。

这里使用的底层管道命令是git fetch。运行 git fetch(可能带有其他选项)后,您可以解析它的输出,这相当可靠,或者使用 git rev-parse(另一个管道命令)来查看各种引用的新值。

如果您的脚本确实需要调用 git mergegit rebase,您可以在此时执行此操作,但请注意,这些命令是瓷器,可以“在中间停止”(用户可能会遇到合并冲突)必须解决)。但至少解码这些情况下发生的事情更简单,因为git mergegit rebase 都具有可靠的退出状态。


1我一直很困惑为什么这个选项拼写为--porcelain 而不是--plumbing

【讨论】:

    猜你喜欢
    • 2018-08-08
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多