首页 > 解决方案 > 如何从 Process.ExitCode 检查 git pull 是否成功

问题描述

我打电话git pull使用ProcessInfo

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

因此,如果ExitCode为 0,则命令成功运行,如果不是,则出现一些错误。

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

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

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

这篇文章提供了检查是否有任何东西要拉的选项 检查 Git 中是否需要拉

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

标签: c#gitprocessgit-pullexit-code

解决方案


不要git pull在脚本中使用。

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

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

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

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


1为什么这个选项被拼写--porcelain而不是. 总是让我感到困惑--plumbing


推荐阅读