push-rules.md 5.2 KB
Newer Older
Lab机器人's avatar
Lab机器人 已提交
1
# 推送选项[](#推送选项 "Permalink")
Lab机器人's avatar
readme  
Lab机器人 已提交
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97

在 GitLab 11.7 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/15643) .

GitLab 支持使用客户端[Git 推送选项](https://git-scm.com/docs/git-push#Documentation/git-push.txt--oltoptiongt)在推送更改的同时执行各种操作. 此外, [推送规则](../../push_rules/push_rules.html)提供服务器端控制和实施选项.

当前,有推送选项可用于:

*   [Skipping CI jobs](#push-options-for-gitlab-cicd)
*   [Merge requests](#push-options-for-merge-requests)

**注意:** Git 推送选项仅在 Git 2.10 或更高版本中可用.

对于 2.10 至 2.17 版本的 Git,请使用`--push-option`

```
git push --push-option=<push_option> 
```

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

```
git push -o <push_option> 
```

## Push options for GitLab CI/CD[](#push-options-for-gitlab-cicd "Permalink")

您可以使用推入选项跳过 CI / CD 管道或传递环境变量.

| 推送选项 | Description | 版本介绍 |
| --- | --- | --- |
| `ci.skip` | 不要为最新推送创建 CI 管道. | [11.7](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/15643) |
| `ci.variable="<name>=<value>"` | 如果由于推送而创建了[环境变量](../../ci/variables/README.html) ,请提供要在 CI 管道中使用的[环境变量](../../ci/variables/README.html) . | [12.6](https://gitlab.com/gitlab-org/gitlab/-/issues/27983) |

使用`ci.skip`的示例:

```
git push -o ci.skip 
```

An example of passing some environment variables for a pipeline:

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

## Push options for merge requests[](#push-options-for-merge-requests "Permalink")

您可以在推送更改的同时使用 Git 推送选项对合并请求执行某些操作:

| 推送选项 | Description | 版本介绍 |
| --- | --- | --- |
| `merge_request.create` | 为推送的分支创建一个新的合并请求. | [11.10](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/26752) |
| `merge_request.target=<branch_name>` | 将合并请求的目标设置为特定分支. | [11.10](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/26752) |
| `merge_request.merge_when_pipeline_succeeds` | 设置合并请求以[在其管道成功时](merge_requests/merge_when_pipeline_succeeds.html)进行[合并](merge_requests/merge_when_pipeline_succeeds.html) . | [11.10](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/26752) |
| `merge_request.remove_source_branch` | 设置合并请求以在合并时删除源分支. | [12.2](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/64320) |
| `merge_request.title="<title>"` | 设置合并请求的标题. 例如: `git push -o merge_request.title="The title I want"` . | [12.2](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/64320) |
| `merge_request.description="<description>"` | 设置合并请求的描述. 例如: `git push -o merge_request.description="The description I want"` . | [12.2](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/64320) |
| `merge_request.label="<label>"` | 将标签添加到合并请求. 如果标签不存在,它将被创建. 例如,对于两个标签: `git push -o merge_request.label="label1" -o merge_request.label="label2"` . | [12.3](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/31831) |
| `merge_request.unlabel="<label>"` | 从合并请求中删除标签. 例如,对于两个标签: `git push -o merge_request.unlabel="label1" -o merge_request.unlabel="label2"` . | [12.3](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/31831) |

如果您使用要求文本带有空格的 push 选项,则需要用引号( `"` )括起来.如果没有空格,则可以省略引号.例如:

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

您可以通过使用多个`-o` (或`--push-option` )标志来组合推送选项以一次完成多个任务. 例如,如果您要创建一个新的合并请求,并定位一个名为`my-target-branch`

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

此外,如果希望合并请求在管道成功后立即合并,则可以执行以下操作:

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

## Useful Git aliases[](#useful-git-aliases "Permalink")

如上所示,Git 推送选项可能导致 Git 命令增长很长. 如果您经常使用相同的 push 选项,则创建[Git 别名会](https://git-scm.com/book/en/v2/Git-Basics-Git-Aliases)很有用. Git 别名是 Git 的命令行快捷方式,可以大大简化长 Git 命令的使用.

### Merge when pipeline succeeds alias[](#merge-when-pipeline-succeeds-alias "Permalink")

[在管道成功执行 Git push 选项时](#push-options-for-merge-requests)[合并](#push-options-for-merge-requests)设置 Git 别名:

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

然后,为了在管道成功时快速推送将针对 master 并合并的本地分支:

```
git mwps origin <local-branch-name> 
```