
# 配置提交规则
#### 什么是提交规则
CodeArts Repo支持为代码的提交建立校验、限制规则，以确保代码质量。
在配置提交规则前，用户请先查看[约束与限制]。
满足配置权限的用户可以根据[表1]为项目下的所有仓库设置相同的提交规则。在配置规则过程中，用户可以参考[常见的正则表达式示例]。
 #### 约束与限制
当用户角色为"项目经理"或者"项目管理员"，可以设置项目级提交规则，如果没有权限，请参考[配置项目级的Repo权限](https://support.huaweicloud.com/usermanual-codeartsrepo/codeartsrepo_03_0087.html)。
#### 配置项目级的提交规则
在代码托管首页，进入项目首页，在上方导航栏选择"设置" \> "策略设置" \> "提交规则"。
如果用户想对项目下的所有仓库设置相同的提交规则，请按照[表1]填写参数，并勾选"开启强制继承"。
 表1仓库的"提交规则"说明 
| **字段**                | **说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 取值样例                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
|:---|:---|:---|
| 拒绝未Signed-off-by签名的提交 | Signed-off-by签名用于记录对代码进行修改的开发人员，表示该开发者正式认可所提交的内容，并愿意承担相应责任。这种方法有助于确保贡献的质量，并提供透明的方式来追踪贡献者。 如果勾选，表示只允许Signed-off-by签名的提交才能推送到仓库。 当前支持以下两种方式签名： - **在线签名：**   在代码托管服务中进行在线commit时，编写提交信息需采用以下格式： ``` commit message             #此处填写自定义提交信息。 #此处为空行。 Signed-off-by:自定义签名   #此处在“Signed-off-by:”后面填写自定义签名。 ``` - **Git客户端签名：**   在Git客户端进行commit时，执行如下命令，"-s"表示在提交信息中添加签名（Signed-off-by），用户需要参考[相关文档]，提前在客户端配置好签名和邮箱。 ``` git commit -s -m “用户的提交备注” ``` | 勾选此选项后，使用示例如下： - **在线签名：** 在线提交文件时，需要按照如下图所示的格式填写提交信息，否则会报错"拒绝推送未签名的提交"。     ![](https://support.huaweicloud.com/usermanual-codeartsrepo/zh-cn_image_0000002236692814.png "点击放大") - **Git客户端签名：** 在本地Git客户端提交时，执行如下命令，表示把更改提交到版本控制系统中，提交信息是"New File"。    ``` git commit -s -m "New File" ``` 执行完后，可继续执行**git show**查看签名效果。 ![](https://support.huaweicloud.com/usermanual-codeartsrepo/zh-cn_image_0000002299016577.png "点击放大") |
| 拒绝未GPG签名的提交           | 如果勾选此选项，表示只允许GPG签名的提交才能推送到仓库。用户可参考[配置GPG公钥](https://support.huaweicloud.com/usermanual-codeartsrepo/codeartsrepo_03_0049.html)配置。 **Git客户端签名方式：** 在Git客户端进行Commit时，需增加"-S"参数，表示提交时使用GPG（GNU Privacy Guard）签名来验证提交者的身份。 ``` git commit -S -m "用户的提交备注" ``` 当用户使用Git客户端进行Tag时，需增加"-s"参数，表示在创建Tag时使用GPG签名来验证Tag的真实性。 ``` git tag -s "用户的Tag备注" ```                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 勾选此选项后，用户执行如下命令，提交信息为"update readme"。 ``` git commit -S -m "update readme" ``` 执行成功后，如下图所示，会提示用户输入GPG密钥的密码。 ![](https://support.huaweicloud.com/usermanual-codeartsrepo/zh-cn_image_0000002264783548.png "点击放大") 如下图所示，用户可以继续执行如下命令，查看GPG签名提交的记录。 ![](https://support.huaweicloud.com/usermanual-codeartsrepo/zh-cn_image_0000002491786374.png "点击放大")                                                                                                                                                                                                                                                                                           |
| 不允许删除Tags             | 勾选后，禁止通过在线或者通过客户端命令的方式删除Tags。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 勾选此选项后，在删除任意Tag时，会报错"提交规则设置不可删除tag"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| 阻止包含涉密文件的提交           | 涉密文件名包含"ssh_server_rsa"、"id_rsa"和"id_dsa"等文件。 勾选此选项后，在线或本地提交新建文件时，文件名包含"ssh"、"rsa"、"id_rsa"、"dsa"或者"id_dsa"均会报错。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 勾选此选项后，新建文件名称为"test_id_rsa"时，会报错"文件 test_id_rsa可能包含敏感信息，禁止提交"。 ![](https://support.huaweicloud.com/usermanual-codeartsrepo/zh-cn_image_0000002272043681.png "点击放大")                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| 拒绝使用git push -f命令提交代码 | 配置是否允许用户在客户端使用**git push -f**命令提交代码。 由于**git push -f**表示将目前用户本地的代码库推送到Repo并覆盖，推荐勾选此选项。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | 勾选此选项后，本地执行**git push -f**命令时，会出现如下图所示的回显，报错 "CodeArts Repo: You are not allowed to force push code to a protected branch on this repository."。 ![](https://support.huaweicloud.com/usermanual-codeartsrepo/zh-cn_image_0000002299482021.png "点击放大")                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   
如果用户想对项目下仓库的指定分支设置提交规则，请用户单击"新建提交规则"，参数填写请参见[表2]。
![](https://support.huaweicloud.com/usermanual-codeartsrepo/public_sys-resources/note_3.0-zh-cn.png)
在配置代码托管服务的提交规则时，代码仓（组）的提交规则参数长度与项目级的提交规则参数长度保持一致。
 表2"提交规则"的参数说明 
| 参数名      | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 取值样例                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
|:---|:---|:---|
| 规则名称     | 自定义规则名称，限制200个字符。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | Test_Rule                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| 分支规则     | 需要输入完整规则名或创建一个正则表达式。需要对输入进行校验，包括分支名的校验和正则表达式校验。限制255个字符。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | "Branch_\*"，表示所有的分支名都需要以"Branch_"开头。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| 提交规则     | 非必填。 - **提交信息匹配规则**：提交信息默认为空，不会对提交信息校验，任何提交信息都可以提交。若符合正则匹配，则允许提交。用户也可以设置在提交信息中必须包含工作项单号，实现代码的E2E追溯，限制255个字符。  - **提交信息** **负面匹配规则** **：**提交信息负面匹配规则默认为空，不会对提交信息校验，任何提交信息都可以提交。若符合正则匹配，则不允许提交。限制255个字符。  - **提交人** ：提交人默认为空，不会对提交人校验，任何人都可以提交，限制200个字符。 提交人可通过执行**git config -l** 查看user.name的值，并通过**git config --global user.name**设置user.name的值。   - **提交人邮箱地址** ：提交人邮箱地址默认为空，不会对提交人邮箱地址校验，任何邮箱地址都可以提交，限制200个字符。 提交人可通过**git config -l**查看user.email的值，并通过"git config --global user.email"设置邮箱。    | - 提交信息匹配规则："\\d+\\..\*"，"\\d"表示任意十进制数字，"+"表示"\\d"可以出现一次或者多次，"."表示除换行符以外的任意单个字符，"\\."表示匹配"."，即该正则表达式匹配会以一个或者多个数字开头，后面跟着一个点号，再跟随任意数量的其他字符（除换行符）的字符串。例如，可以匹配"123."、"456.abc"等形式的字符串，满足此匹配规则的提交信息才可提交。  - 提交信息负面匹配规则：置空。  - 提交人："/(\[a-zA-Z\]d){7}/"，表示匹配连续出现7次的以一个字母后跟一个数字组成的字符串。例如，"a1b2c3d4e5f6g7d8"符合该正则表达式。  - 提交人邮箱地址："@my-company.com$"，表示匹配任何以"@my-company.com"结尾的字符串。例如，"Test@my-company.com"符合该正则表达式。   更多正则表达式规则可参考[常见的正则表达式示例]。 |
| 文件基本属性规则 | 非必填。 - **禁止提交的文件名称**：禁止提交的文件名称规则默认为空，不会对文件名校验，任何文件都可以提交，建议正则编写时使用规范的正则语句进行匹配，文件名禁用规则处默认会根据规则校验文件所属路径，限制2000个字符。  - **单文件大小限制（MB）**：表示添加或更新文件大小超过默认值，推送将被拒绝。用户可以更改默认值大小。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | - 禁止提交的文件名称："(\\.jar\|\\.exe)$"，表示匹配任何以" .jar"或".exe"结尾的文件名。  - 单文件大小限制（MB）：50。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| 二进制规则    | 非必填。为保证仓库性能，建议用户勾选"禁止新增二进制文件（对特权用户无效）"选项。 二进制规则默认不勾选，默认勾选"禁止新增二进制文件（对特权用户无效）"。**"允许修改二进制文件（对特权用户无效）"**勾选后，提交文件为modify状态的二进制文件不会拦截，可直接上传。二进制文件可以直接删除，不会进行二进制检查。 - 禁止新增二进制文件（对特权用户无效）。  - 允许修改二进制文件（对特权用户无效）。  - 二进制文件白名单（可直接入库的文件，限制2000个字符）。  - 特权用户（特权用户上限为50人）。如果特权用户已不是仓库成员，单击"保存"会报错"特权用户校验失败"，将非仓库成员的特权用户移除即可保存成功。                                                                                                                            | 示例：勾选"禁止新增二进制文件（对特权用户无效）"选项。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| 规则生效时间   | 非必填。 在生效日期之后创建的所有提交都必须与hook设置相匹配才能被推送。如果此字段为空，则无论提交日期如何，都将检查所有提交。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 示例：2025/4/15。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   
 #### 常见的正则表达式示例
常见的正则表达式示例可参考[常见的正则表达式示例]。
 表3常见正则表达式示例 
| 规则                    | 示例         |
|:---|:---|
| 单个a或b或c字符             | \[abc\]    |
| 非a或b或c的字符             | \[\^abc\]  |
| 在a到z范围内的小写英语字母字符      | \[a-z\]    |
| 在a到z范围外的字符            | \[\^a-z\]  |
| 在a到z或A到Z范围内的大小写英语字母字符 | \[a-zA-Z\] |
| 任意单个字符                | .          |
| 匹配"a"或"b"             | a\|b       |
| 任意空白字符                | \\s        |
| 非空白字符                 | \\S        |
| 阿拉伯数字字符               | \\d        |
| 非阿拉伯数字字符              | \\D        |
| 字母、数字或下划线的字符          | \\w        |
| 非字母、数字或下划线的字符         | \\W        |
| 匹配括号中的内容（不捕获）         | (?:...)    |
| 匹配并捕获括号中的内容           | (...)      |
| 零个或一个a                | a?         |
| 零个或更多a                | a\*        |
| 一个及以上a                | a+         |
| 三个a                   | a{3}       |
| 三个a以上                 | a{3,}      |
| 3到6个a                 | a{3,6}     |
| 文本开头                  | \^         |
| 文本末尾                  | $          |
| 单词边界                  | \\b        |
| 非单词边界                 | \\B        |
| 换行符                   | \\n        |
| 回车符                   | \\r        |
| 制表符                   | \\t        |
| 空字符                   | \\0        |
   
 #### 管理提交规则
如下图所示，单击提交规则所在行的![](https://support.huaweicloud.com/usermanual-codeartsrepo/zh-cn_image_0000002216156176.png)，可查看提交规则详情。单击![](https://support.huaweicloud.com/usermanual-codeartsrepo/zh-cn_image_0000002251275833.png)，可修改规则并重新保存。单击![](https://support.huaweicloud.com/usermanual-codeartsrepo/zh-cn_image_0000002251195953.png)，可删除此提交规则。
图1提交规则详情   
![](https://support.huaweicloud.com/usermanual-codeartsrepo/zh-cn_image_0000002251275837.png "点击放大")
 #### 相关文档
- 执行如下命令，在Git配置全局用户名。
  ```
  git config --global user.name "用户的名字"
  ```
  
- 执行如下命令，在Git设置全局邮箱。
  ```
  git config --global user.email "用户的邮箱地址"
  ```
  
 
