如何从Process.ExitCode检查git pull是否成功

问题描述

我正在使用git pull呼叫ProcessInfo

我正在检查ExitCode中是否有所有成功的命令。

因此,如果ExitCode为0,则如果没有错误,则命令成功运行。

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

有什么方法可以检查pull命令的成功吗?

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

此帖子提供了检查是否有任何东西要拉的选项 Check if pull needed in Git

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

解决方法

请勿在脚本中使用git pull

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

git pull命令严格来说是瓷器,而不是管道。

此处要使用的基础管道命令为git fetch。运行git fetch(可能还有其他选项)后,您可以分析其输出,该输出相当可靠,或者使用git rev-parse(另一个管道命令)查看各种引用的新值。

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


1 总是让我感到困惑的是,为什么将此选项拼写为--porcelain而不是--plumbing