Jenkins 与 Git:在出现分支时执行 git pull

问题描述 投票:0回答:1

我很清楚,在为 Jenkins 作业编写管道脚本时,好的做法是每次运行作业时重新克隆存储库,但是我确实发现自己希望只提取分支内容或签出修订版本,然后运行这方面的工作(至少在某些情况下)。

但是我想让用户指定要签出的哈希值或分支名称。

如果它是分支名称,那么 git pull 是合适的,因为用户可能会推送新内容来尝试该作业。

但是如果指定的修订版是散列,那么我们将处于分离的 HEAD 模式,并且

git pull
将失败并显示

You are not currently on a branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

如何消除此错误或仅在指定的分支时运行

git pull
?或者完全规避这个问题?

我找到了一些代码来检查通过的修订是否是分支,但我发现它有点烦躁:

git show-ref --verify --quiet refs/heads/${params.revision}
if %ERRORLEVEL% EQU 0 git pull

还有更自然的建议吗?

git jenkins branch git-pull git-detached-head
1个回答
0
投票

以下 2 个命令集适用于提交 ID 和分支名称:

git fetch origin <commit-ID-or-branch-name>
git checkout <commit-ID-or-branch-name>

请注意,

checkout
命令可用于提交 ID 和分支名称,而无需指定
--detach
选项。如果您的管道不需要在分支上创建新提交,那么即使您正在签出分支,最好始终使用提交 ID,在这种情况下,您应该使用
--detach
选项和
checkout
,或者,您也可以使用
switch
命令:

git fetch origin <commit-ID-or-branch-name>
git switch --detach <commit-ID-or-branch-name>

旁注: 检查特定提交与

pull
略有不同。由于您问题的前提是将拉取与新克隆进行比较,那么这在功能上是等效的,并且实际上在概念上比
pull
更“干净”,因为它忽略了未知本地提交污染构建的可能性。

© www.soinside.com 2019 - 2024. All rights reserved.