git pull origin master,在没有pull的情况下检查是不是有冲突

Posted

技术标签:

【中文标题】git pull origin master,在没有pull的情况下检查是不是有冲突【英文标题】:git pull origin master, check if any conflicts without pullgit pull origin master,在没有pull的情况下检查是否有冲突 【发布时间】:2021-11-06 03:05:42 【问题描述】:

我想自动化构建,在创建构建之前我必须从 master 中提取,然后我必须构建包。但我想在从 master 拉取之前有一个检查点,看看是否有任何冲突,这样我就可以使构建失败。

任何人都可以建议如何在 gitscm 中为 jenkins 执行此操作(或 git 也可以)。我找不到合适的解决方案,也许我的理解不清楚,因为我没有开发背景。

提前致谢。

【问题讨论】:

创建目标分支的副本,尝试拉取它,然后根据退出代码,您会知道是否可以在真实目标上复制。确实感觉会有/应该有一种更“优雅”的方式来先发制人地知道,但我不知道。 是的,它的工作方式与 shell 脚本相同,但我认为 git 命令本身必须有一种方法。非常感谢。 注意pull的意思是运行fetch,然后运行第二个命令来处理fetch获得的提交。该second 命令是可配置 并且可能有也可能没有合并冲突的命令。如果您要构建可预测且可靠的软件,请不要在此处使用git pull,因为git pull 的行为基于某些用户的配置,因此很难预测。 在任何情况下,判断合并是否失败的唯一方法(假设您希望将git merge 作为第二个命令)是尝试它。目前这意味着您必须在工作树中尝试。只有一种方法可以做到这一点。 【参考方案1】:

如果您在 jenkins 中执行此工作,则构建工作将在其自己的沙箱上运行,您可以破坏性地使用它,因为它无论如何都是临时的。正如@Romain Valeri 所建议的那样,您需要做的就是检查git pull 操作的退出状态,并仅在成功时继续,因为存在冲突的git pull 以非零值退出。

如果你的食谱是在 bash 中的,这样的东西会起作用:

if git pull; then
   # proceed with build
else
   # there was a conflict, abort with error
fi

或者只是

git pull or exit_with_error
# proceed with build

在你的詹金斯构建配方中应该很容易做到这一点。

【讨论】:

是的,它的工作方式与 shell 脚本相同,但我认为 git 命令本身必须有一种方法。非常感谢。 好吧,无论是在 git 命令中、在 shell 中还是在配方中,它仍然归结为对 pull 操作的退出代码进行操作。【参考方案2】:

也许您正在寻找的是命令 fetch,它的作用与 pull 几乎相同,并且可以让您有机会检查冲突。

【讨论】:

我认为 OP 想知道 以编程方式 拉动是否会引发冲突。 fetching 将如何实现这一点?

以上是关于git pull origin master,在没有pull的情况下检查是不是有冲突的主要内容,如果未能解决你的问题,请参考以下文章

git pull origin master命令后发生冲突

git pull origin master,在没有pull的情况下检查是不是有冲突

git.exe pull --progress -v --no-rebase "origin" master

git fetch 和git pull 的差别

git fetch和pull的区别

git pull后为啥分支没有更新