如何通过命令行创建GitLab合并请求

pat*_*ick 32 git-merge gitlab

我们正在努力将GitLab(企业版)集成到我们的工具中,但仍然在我们的愿望清单中的一件事是通过命令行(或批处理文件或类似文件)在GitLab中创建合并请求.我们希望将其整合到我们的工具中.在这里和网上搜索让我相信使用原生GitLab是不可能的,但我们需要额外的工具.

我对么?我想用什么样的工具呢?

Ahm*_*rif 16

从GitLab 11.10开始,如果您使用的是git 2.10或更高版本,则可以从命令行自动创建合并请求,如下所示:

git push -o merge_request.create
Run Code Online (Sandbox Code Playgroud)

可以在文档中找到更多信息。

  • 您可以使用以下命令指定目标分支:`git push -o merge_request.create -o merge_request.target=develop`,也可以通过附加`-o merge_request.remove_source_branch`删除源分支 (6认同)
  • 您能否在有关如何指定目标分支和删除源分支选项的答案中添加一些扩展? (3认同)
  • 如何指定目标分支? (2认同)
  • 另请注意,如果您想在不提交的情况下推送,则此命令不起作用 (2认同)

jax*_*orm 13

它不是原生支持的,但它并不难拼凑起来.gitlab API支持打开MR:https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/merge_requests.md#create-mr

  • @布拉德K。Gitlab 已移动 [git push 选项文档](https://docs.gitlab.com/ce/user/project/push_options.html)。您还可以在[将此功能添加到 Gitlab 的合并请求](https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/26752/diffs#049c303050e26ad7acb9ba3f79f95ef3ec7159b7_222_222)中查看原始文档。 (3认同)
  • 现在通过传递git push选项来本地支持:https://docs.gitlab.com/ce/user/project/merge_requests/#git-push-options (2认同)

Vis*_*ath 9

您可以使用以下实用程序。

披露:我开发了它。

https://github.com/vishwanatharondekar/gitlab-cli

您可以使用此创建合并请求。

它具有的某些功能。

  1. 基本分支是可选的。如果未提供基本分支。当前分支用作基础分支。
  2. 目标分支是可选的。如果未提供目标分支,则将使用gitlab中仓库的默认分支。
  3. 创建成功的请求请求页面将自动打开。
  4. 如果-m选项值不支持标题。它将从就地编辑器中打开。第一行作为标题。
  5. 在编辑器中打开的第三行起进行描述。
  6. 可以使用逗号分隔的标签列表。
  7. 支持CI。
  8. 可以提供特定于存储库的配置。
  9. 壁球选项可用。
  10. 删除源分支选项可用。


mil*_*czi 8

如果您在此命令 ( git push -o merge_request.create)之前推送您的分支,它将不起作用。Git 将响应Everything up-to-date并且不会创建合并请求(gitlab 12.3)。

当我尝试从服务器上删除我的分支(不要删除您的本地分支!!!)时,它以这种形式对我有用。

git push --set-upstream origin your-branch-name -o merge_request.create


git*_*rik 7

我创建了一个 shell 函数,可以使用所需的参数打开 GitLab MR 网页。

根据您当前所在的 git 存储库的目录,它:

  • 找到您的存储库的正确 URL。
  • 将源分支设置为您当前所在的分支。

作为可选的第一个参数,您可以提供目标分支。否则,GitLab 默认为您的默认分支,通常为mastermain

gmr() {
    # A quick way to open a GitLab merge request URL for the current git branch
    # you're on. The optional first argument is the target branch.

    repo_path=$(git remote get-url origin --push | sed 's/^.*://g' | sed 's/.git$//g')
    current_branch=$(git rev-parse --abbrev-ref HEAD)

    if [[ -n $1 ]]; then
        target_branch="&merge_request[target_branch]=$1"
    else
        target_branch=""
    fi

    xdg-open "https://gitlab.com/$repo_path/merge_requests/new?merge_request[source_branch]=$current_branch$target_branch"

}
Run Code Online (Sandbox Code Playgroud)

您可以在 URL 中设置更多默认值,例如合并后删除源分支:

&merge_request[force_remove_source_branch]=true
Run Code Online (Sandbox Code Playgroud)

或受让人给某人:

&merge_request[assignee_ids][]=12345
Run Code Online (Sandbox Code Playgroud)

或者添加审稿人:

&merge_request[reviewer_ids][]=54321
Run Code Online (Sandbox Code Playgroud)

您可以通过搜索 GitLab MR 网页的源代码来轻松找到可能的查询字符串参数merge_request[


Von*_*onC 6

自 GitLab 15.7(2022 年 12 月)起,GitLab CLIglab正式集成到 GitLab。

\n
\n

介绍 GitLab CLI

\n

命令行是软件工程师\xe2\x80\x99s 工具包中最重要的工具之一,他们的大部分流程和工作都围绕可用的工具进行。他们通过样式自定义 CLI 并将其扩展至应用程序,以确保执行任务时的最高效率。CLI 是开发人员完成工作所依赖的脚本和工作流程的支柱。

\n

为了支持更多已经在工作的开发人员\xe2\x80\x99,我们\xe2\x80\x99 采用了开源项目glab,这将构成 GitLab\xe2\x80\x99 原生 CLI 体验的基础。
\nGitLab CLI 将 GitLab 与 Git 和您的代码结合在一起,无需应用程序或选项卡切换。

\n

您可以在我们的博客文章中了解我们对 glab 的采用、我们与 1Password 的合作伙伴关系以及如何为该项目做出贡献

\n

特别感谢克莱门特·萨姆创建 glab 并将其未来交给我们。

\n

https://about.gitlab.com/images/15_7/create-code-review-gitlab-cli-released.gif

\n
\n
\n

这意味着您可以使用以下命令创建 MRglab mr create

\n
glab mr create -a username -t "fix annoying bug"\n
Run Code Online (Sandbox Code Playgroud)\n


Sam*_*zar 5

除了回答@AhmadSherif,您还可以merge_request.target=<branch_name>用于声明目标分支。

示例用法:

git push -o merge_request.create -o merge_request.target=develop origin feature
Run Code Online (Sandbox Code Playgroud)

简单这个:

根据 Gitlab 文档,您可以为此命令定义别名以简化使用。

git config --global alias.mwps "push -o merge_request.create -o 
merge_request.target=master -o merge_request.merge_when_pipeline_succeeds"
Run Code Online (Sandbox Code Playgroud)