160.md 8.0 KB
Newer Older
Lab机器人's avatar
readme  
Lab机器人 已提交
1 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 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
# Push Rules

> 原文:[https://docs.gitlab.com/ee/push_rules/push_rules.html](https://docs.gitlab.com/ee/push_rules/push_rules.html)

*   [Overview](#overview)
*   [Use cases](#use-cases)
    *   [Commit messages with a specific reference](#commit-messages-with-a-specific-reference)
    *   [Restrict branch names](#restrict-branch-names)
    *   [Custom Push Rules](#custom-push-rules-core-only)
*   [Enabling push rules](#enabling-push-rules)
*   [Prevent pushing secrets to the repository](#prevent-pushing-secrets-to-the-repository)

# Push Rules[](#push-rules-starter "Permalink")

通过使用正则表达式拒绝基于提交内容,分支名称或文件详细信息的推送,来获得对哪些内容可以推送或不能推送到存储库的额外控制.

## Overview[](#overview "Permalink")

GitLab 已经提供了[受保护的分支](../user/project/protected_branches.html) ,但是在某些情况下,您需要一些特定的规则,例如,防止删除 Git 标签或对提交消息强制采用特殊格式.

推送规则本质上是[预先接收的 Git 挂钩](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks) ,可在用户友好的界面中轻松启用. 如果您是管理员或每个项目,它们是全局定义的,因此您可以根据需要将不同的规则应用于不同的项目.

## Use cases[](#use-cases "Permalink")

每个推送规则都可以有自己的用例,但让我们考虑一些示例.

### Commit messages with a specific reference[](#commit-messages-with-a-specific-reference "Permalink")

假设您对工作流程有以下要求:

*   每个提交都应引用 Jira 问题,例如: `Refactored css. Fixes JIRA-123.` `Refactored css. Fixes JIRA-123.`
*   用户应该无法使用`git push`删除 Git 标签

您需要做的就是编写一个简单的正则表达式,要求在提交消息中提及一个 Jira 问题,例如`JIRA\-\d+` .

现在,当用户尝试通过消息`Bugfix`推送提交时,他们的推送将被拒绝. 仅接受`Bugfix according to JIRA-123`推送带有`Bugfix according to JIRA-123`消息的提交.

### Restrict branch names[](#restrict-branch-names "Permalink")

假设您公司中有严格的分支机构名称政策,并且您希望分支机构以特定名称开头,因为您有不同的 GitLab CI / CD 作业( `feature``hotfix``docker``android`等)依赖于分支机构名称.

但是,您的开发人员并不总是记住该策略,因此他们可能会推送到各个分支,并且 CI 管道可能无法按预期工作. 通过在推送规则中全局限制分支名称,可以防止此类错误. 与您的推送规则不匹配的任何分支名称都将被拒绝.

请注意,不管指定的分支命名正则表达式(regex)如何,始终允许使用默认分支的名称. 通过这种方式配置 GitLab,因为合并通常将默认分支作为目标. 如果您还有其他目标分支,请将其包含在正则表达式中. (请参阅[启用推送规则](#enabling-push-rules) ).

默认分支还默认为[受保护分支](../user/project/protected_branches.html) ,这已经限制了用户直接推送.

### Custom Push Rules[](#custom-push-rules-core-only "Permalink")

通过使用更高级的服务器挂钩,可以创建自定义推送规则,而不是" **管理区域">"推送规则"中**可用的**推送规则** .

有关更多信息,请参见[服务器挂钩](../administration/server_hooks.html) .

## Enabling push rules[](#enabling-push-rules "Permalink")

**注意:** GitLab 管理员可以在" **管理区域">"**所有新项目都将继承的**推送规则"**下全局设置推送规则. 您以后可以在项目的设置中覆盖它们. 也可以在[组级别](../user/group/index.html#group-push-rules-starter)上设置它们.

1.  导航到项目的**"设置">"存储库",**然后展开" **推送规则"**
2.  设置所需的规则
3.  单击" **保存推送规则"**以使更改生效

以下选项可用.

| 推送规则 | GitLab 版本 | Description |
| --- | --- | --- |
| 用`git push`删除标签 | **Starter** 7.10 | 禁止用户使用`git push`删除 Git 标签. 仍然可以通过 Web UI 删除标签. |
| 检查作者是否是 GitLab 用户 | **Starter** 7.10 | 限制作者(电子邮件)对现有 GitLab 用户的提交. |
| 提交者限制 | **Premium** 10.2 | GitLab will reject any commit that was not committed by the current authenticated user |
| 检查提交是否通过 GPG 签名 | **Premium** 10.1 | 如果未通过 GPG 签名,则拒绝提交. [使用 GPG](../user/project/repository/gpg_signed_commits/index.html)阅读[签名提交](../user/project/repository/gpg_signed_commits/index.html) . |
| 防止向 Git 提交机密 | **Starter** 8.12 | GitLab 将拒绝任何可能包含机密的文件. 阅读[禁止使用的文件](#prevent-pushing-secrets-to-the-repository) . |
| 通过提交消息限制 | **Starter** 7.10 | 只允许推送与此正则表达式匹配的提交消息. 保留为空以允许任何提交消息. 使用多行模式,可以使用`(?-m)`禁用该模式. |
| 受提交消息限制(负匹配) | **Starter** 11.1 | 只允许提交与此正则表达式不匹配的提交消息. 保留为空以允许任何提交消息. 使用多行模式,可以使用`(?-m)`禁用该模式. |
| 受分支名称限制 | **Starter** 9.3 | 只允许推送与此正则表达式匹配的分支名称. 保留为空以允许使用任何分支名称. |
| 通过提交作者的电子邮件进行限制 | **Starter** 7.10 | 只允许推送与此正则表达式匹配的提交者的电子邮件. 留空以允许任何电子邮件. |
| 禁止的文件名 | **Starter** 7.10 | 与该正则表达式匹配的所有提交的文件名均不允许推送. 保留为空以允许任何文件名. |
| 最大档案大小 | **Starter** 7.12 | 包含超过此文件大小(以 MB 为单位)的添加或更新文件的推送将被拒绝. 设置为 0 允许任何大小的文件. 由 Git LFS 跟踪的文件被豁免. |

**提示:** GitLab 对推送规则中的正则表达式使用[RE2 语法](https://github.com/google/re2/wiki/Syntax) ,您可以在[GoLang regex tester 上](https://regex-golang.appspot.com/assets/html/index.html)对其进行[测试](https://regex-golang.appspot.com/assets/html/index.html) .

## Prevent pushing secrets to the repository[](#prevent-pushing-secrets-to-the-repository "Permalink")

[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/385) in [GitLab Starter](https://about.gitlab.com/pricing/) 8.12.

诸如凭证文件,SSH 私钥之类的机密以及其他包含机密的文件绝不应提交给源代码控制. GitLab 允许您打开文件的预定义拒绝列表,该列表将不允许被推送到存储库,从而阻止这些提交到达远程存储库.

通过选中*防止向 Git 提交机密*复选框,当文件与从[`files_denylist.yml`](https://gitlab.com/gitlab-org/gitlab/blob/master/ee/lib/gitlab/checks/files_denylist.yml)读取的正则表达式匹配时,GitLab 会阻止将其推送到存储库(在查看此文件时,请确保您处于与 GitLab 版本相同的正确分支).

**注意:**已经提交的文件将不受此推送规则的限制.

下面是这些正则表达式将拒绝的内容的示例列表:

```
#####################
# AWS CLI credential blobs
#####################
.aws/credentials
aws/credentials
homefolder/aws/credentials

#####################
# Private RSA SSH keys
#####################
/ssh/id_rsa
/.ssh/personal_rsa
/config/server_rsa
id_rsa
.id_rsa

#####################
# Private DSA SSH keys
#####################
/ssh/id_dsa
/.ssh/personal_dsa
/config/server_dsa
id_dsa
.id_dsa

#####################
# Private ed25519 SSH keys
#####################
/ssh/id_ed25519
/.ssh/personal_ed25519
/config/server_ed25519
id_ed25519
.id_ed25519

#####################
# Private ECDSA SSH keys
#####################
/ssh/id_ecdsa
/.ssh/personal_ecdsa
/config/server_ecdsa
id_ecdsa
.id_ecdsa

#####################
# Any file with .pem or .key extensions
#####################
*.pem
*.key

#####################
# Any file ending with _history or .history extension
#####################
pry.history
bash_history 
```