极狐 GitLab 冷知识:使用 git push 创建 Merge Request

2024-01-12 08:44

本文主要是介绍极狐 GitLab 冷知识:使用 git push 创建 Merge Request,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

在使用 GitLab 时,创建 Merge Request 是最常用的功能之一,每天有大量的 Merge Request 被 Create、Review、Approve 和 Merge,尽管 GitLab 的产品经理和 UX 设计师们已经尽力的将 UI 设计的简洁易懂好操作,并提供了一些诸如使用 Email、API、Web IDE、VS Code 插件等创建 Merge Request 的功能,但这些操作都逃不过:create new branch ==> git push ==> create merge request 这三步。

那么有没有方法可以将这三步合并成一步呢?答案是有的,git push options 可以直接通过 git push 来创建 GitLab Merge Request。

Tips:在您向 GitLab 推送新分支完成后,GitLab 会在您的终端用链接提示您创建合并请求,效果如下:... remote: To create a merge request for my-new-branch, visit: remote: https://gitlab.example.com/my-group/my-project/merge_requests/new?merge_request%5Bsource_branch%5D=my-new-branch ⌘+点击该链接 即可直接跳转 Merge Request 创建页面。

版本要求

GitLab 自 11.7 版本开始支持 git push options,目前(GitLab 15.0)支持的 push options 有 CI/CD 操作Merge Request 操作 两种。

Git push options 仅适用于 Git 2.10 或更新版本。

对于 Git 版本 2.10 到 2.17,使用 --push-option:


git push --push-option=<push_option>

对于 2.18 及更高版本,您可以使用上述格式,或者更短的 -o:

git push -o <push_option>

创建 Merge Request

现在您就可以使用一行 git push 命令来完成推送代码+创建 Merge Request 的操作了:

git push -o merge_request.create -o merge_request.target=my-target-branch

复制代码

Tips: 通过使用多个 -o(或 --push-option)标志,您可以组合推送选项以一次完成多个任务。

可用选项

GitLab 提供了多种操作项来帮您完成 Merge Request 的创建。当然,您也可以通过 merge_request.description + Quick action 的方式完成更多的操作。

如果您使用要求文本中包含空格的推送选项,则需要将其括在引号 (") 中。如果没有空格,您可以省略引号。一些示例:

git push -o merge_request.label="Label with spaces"git push -o merge_request.label=Label-with-no-spaces

复制代码

在 GitLab CI 中创建 Merge Request

目前网上对于在 GitLab CI 中创建 Merge Request 的方法,全是使用 curl 调用 GitLab API 来实现的。其实不必那么麻烦,git push options 一个操作即可解决。

Create Merge Request:  stage: push  image: alpine:latest  before_script:    - sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories    - apk add --update git    - git config --global user.name "${GITLAB_USER_NAME}"    - git config --global user.email "${GITLAB_USER_EMAIL}"  script: |        echo "create merge request"    git checkout -b auto-${CI_JOB_ID}    git add .    git commit -m "auto create merge request"    git push "https://${GITLAB_USER_LOGIN}:${CI_GIT_TOKEN}@${CI_REPOSITORY_URL#*@}" "HEAD:auto-${CI_JOB_ID}" \     -o merge_request.create -o merge_request.target=develop -o merge_request.remove_source_branch \     -o merge_request.title="auto generator swagger api" -o merge_request.label="auto-generation" -o merge_request.assign="qk44077907"

这里的 $CI_GIT_TOKEN 需要先创建用户访问令牌,并将其添加到 CI/CD Variables 当中。如果使用的是项目访问令牌,则需要将 ${GITLAB_USER_NAME} 和 ${GITLAB_USER_EMAIL} 配置为项目机器人用户:

  • Name:project_{project_id}_bot

  • Email:project{project_id}_bot@noreply.{Gitlab.config.gitlab.host}

更多内容见官方文档。

CI/CD Push options

目前支持的 CI/CD push options 有两个:跳过 CI Jobs插入 CI/CD Variable,比较常用的是 插入 CI/CD Variable,可以用来测试一些 Variable 的效果。

使用 ci.skip 的示例:

git push -o ci.skip

为流水线传递一些 CI/CD 变量的示例:

git push -o ci.variable="MAX_RETRIES=10" -o ci.variable="MAX_TIME=600"

使用 git alias 简化命令

一般来说使用 git push options 的场景都比较固定,可以考虑将很长的 push options 设置为 Git aliases 来简化命令。

设置 Git alias:

git config --global alias.mwps "push -o merge_request.create -o merge_request.target=master -o merge_request.merge_when_pipeline_succeeds"

然后快速推送以默认分支为目标的本地分支,并在流水线成功时合并:

git mwps origin <local-branch-name>

结语

极狐 GitLab 文档中心

现已正式上线,本文的大部分内容来自使用 Git --> 推送选项部分。在开始动手工作之前仔细阅读一下文档是一个非常好的习惯,可以帮助您少走很多弯路。

参考资料

  • 推送选项 - docs.gitlab.cn

这篇关于极狐 GitLab 冷知识:使用 git push 创建 Merge Request的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/597330

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三