c# - 如何从 Process.ExitCode 检查 git pull 是否成功
问题描述
我打电话git pull
使用ProcessInfo
我正在检查ExitCode
所有命令是否成功。
因此,如果ExitCode
为 0,则命令成功运行,如果不是,则出现一些错误。
一切正常,当它尝试执行 agit pull
并且存储库已经是最新的时会出现问题。在那种情况下,git 认为它失败并返回ExitCode=1
,但对我来说这是成功的,只是没有什么可以拉的。
有什么方法可以检查 pull 命令是否成功?
我有一种方法,如果我可以以某种方式运行命令来检查是否有任何要拉的东西,如果该命令返回 true,那么我将执行拉,否则不会
这篇文章提供了检查是否有任何东西要拉的选项 检查 Git 中是否需要拉
如果有直接的方法可以单独处理拉动,或者在拉动之前我应该检查什么,有人可以帮忙吗?
解决方案
不要git pull
在脚本中使用。
Git 通常将其命令分为旨在从脚本中使用的管道命令和旨在由人类运行的瓷器命令。管道命令以可预测的方式运行并具有可靠的退出代码,并且在适当的时候生成或具有生成机器可读输出的选项。瓷器命令没有。一些命令,例如,可以以任何一种方式运行:以“管道方式”运行。1 Porcelain 命令也经常服从特定的用户配置控制,因此无法保证运行相同命令的两个不同用户获得相同的行为。git status
git status --porcelain=v2
git status
该git pull
命令严格来说是瓷器,而不是管道。
此处使用的底层管道命令是git fetch
. 运行后git fetch
(可能带有其他选项),您可以解析它的输出,这是相当可靠的,或者使用git rev-parse
- 另一个管道命令 - 来查看各种引用的新值。
如果您的脚本确实需要调用git merge
or git rebase
,您可以在此时执行此操作,但请注意,这些命令是瓷器,可以“在中间停止”(用户必须解决合并冲突)。但至少解码这些情况下发生的事情更简单,因为两者git merge
都git rebase
具有可靠的退出状态。
1为什么这个选项被拼写--porcelain
而不是. 总是让我感到困惑--plumbing
。
推荐阅读
- node.js - expressjs 路由器获取:id 多级
- java - Swing - 如何将我的应用程序限制为屏幕大小
- android - 颤振热重载不起作用。需要帮助
- ios - WKWebView 不会打开 @click 侦听器并从 Vue.js 的图标重定向
- java - 从 HTML 中获取标签数组
- beanshell - 我们如何通过Beanshell(Jmeter)中的字符串数组在正文中发送不同的请求
- html - 让 SVG 图标提交搜索查询的输入
- rust - 编译器如何推断此 Box::leak(node).into() 中的类型?
- struct - Rust 中是否保证了初始化结构字段的顺序?
- python - ModuleNotFoundError: No module named... 从子目录导入