推送规则设置

更新时间:
复制 MD 格式

为了规范开发者提交格式,平台提供检查服务,支持自定义规则,对未推送提交检查。本文主要介绍了如何创建推送规则,以及触发规则后的展示。

创建推送规则

  1. 作为库管理员,点击左下角设置进入代码库设置页面,找到推送规则设置

  2. 单击新建推送规则,设置规则参数。

    新建推送规则弹窗包含以下参数:提交说明(提交说明需匹配的正则表达式,示例 ^fix #[A-Z]+\-[0-9]+),提交邮箱(Committer 邮箱需匹配的正则表达式,示例 @example\.com$),提交文件限制(文件名匹配正则将禁止推送,支持多条规则以换行隔开)。同时可勾选禁止强制推送(Force Push)代码属主检查;检查规则支持选择检查作者(Author)检查提交者(Committer);限制级别可选禁止推送仅警告,允许推送。设置完成后单击确定

    重要

    仅支持针对全库所有分支启用检查规则。

  • 提交注释:即 Commit message,需符合正则表达式才允许推送,为空表示允许所有提交注释。如何书写正则表达式

  • 提交邮箱:即 git config 设置的邮箱,需符合正则表达式才允许推送,为空表示允许所有邮箱。如何书写正则表达式

  • 禁止强制推送(Force Push):强制推送会覆盖远程代码,可能造成代码和提交记录丢失,需谨慎使用。如希望排查是否因为成员强制推送导致提交记录丢失,可通过代码库动态筛查强制推送事件以追溯操作人。在代码托管平台的动态页面中,可以查看到用户对代码库分支执行强制推送代码的操作记录。

    为了避免由于强制推送导致的代码丢失问题,可以通过开启禁止强制推送对操作进行限制。

    开启禁止强制推送后,若本地代码和远端存在分叉,无法通过 git push -f 强行推送本地代码,避免服务端代码被覆盖。

    说明

    当已开启禁止强制推送,但是本地代码和远端服务器代码无分叉时,此时即使使用 git push -f 命令进行推送,效果也和git push一致,可以成功推送。

  • 代码属主检查:在开始使用 Git 进行版本管理之前,需要先进行用户配置。

    git config --global user.name "您的名字"
    git config --global user.email "您的邮箱"

提交记录的作者(Author)与提交者(Committer)的区别

  • Git 允许重写历史或代表他人提交代码:为保证代码贡献统计的准确性,提交代码时应确保作者(Author)与当前登录用户一致,以正确反映代码的实际贡献者。

  • 通常情况下,提交者 Committer 并不对用户暴露:只有指定git log --format(例如format=fuller)时才会展示。提交者代表着这个提交记录Commit最终提交的人(提交时git config user.namegit config user.email)。

  • 在使用 git commit 命令时,可以通过 `author` 参数指定提交记录的贡献者:在开源项目中,即使未直接使用某人的代码但采用了其创意,也应将其列为作者以示尊重。初始提交的AuthorCommitter通常是同一人。但使用如`git cherry-pick`、`git rebase`等命令重写提交历史时,Author保持不变,而Committer变更为执行操作的人。简单来说,Author是原始贡献者,Committer是生成提交的人。

  • Codeup支持针对AuthorCommitter对当前登录用户已验证的主邮箱做检查:若邮箱信息无法匹配,可警告或限制推送,确保代码贡献属主准确,避免因用户匹配失败导致贡献量计算失真。

    在云效 DevOps 右上角进入个人设置,选择左侧导航栏个人信息,在邮箱区域可查看和管理已绑定的邮箱,其中标记为主邮箱的地址即为 Codeup 用于匹配 Author / Committer 的邮箱;如需新增邮箱,单击绑定邮箱并完成验证。

继承组织级规则

继承自组织的规则不可编辑和删除,仅支持查看,如需修改请联系组织管理员,请参见组织级代码库管理设置

推送时检查

假设规则设置如下。检查规则:检查作者;限制级别:仅警告。

该推送规则的提交说明设置为 feature-*提交邮箱限定为 @alibaba.com提交文件限制为无,强制推送设置为禁止。

页面操作

当提交时注释不符合已设置的规则时,提交将被拒绝。此时页面顶部显示红色错误提示推送规则检查不通过,标明提交注释不符合设定的正则表达式(如 feature-*)及被拒绝的 commit ID。

当提交邮箱不符合规则时,提交也会被拒绝。

此时页面顶部显示红色错误提示推送规则检查不通过,标明提交者邮箱不符合设定的正则表达式(如 @alibaba.com)及被拒绝的 commit ID。

合并请求时同理。

命令行操作

当提交注释不符合规则时,会出现如下报错:

misha-MacBookPro:Codeup-Demo-123 teambition$ git push
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 235 bytes | 235.00 KiB/s, done.
Total 2 (delta 1), reused 0 (delta 0)
remote: master:推送规则检查不通过!提交注释不符合正则表达式 feature-*。
remote: 修改方法参见:http://t.tb.cn/30VwoIifScyCkxCeltF4UP
remote: 如需修改检查规则,请联系代码库管理员处理
To codeup.teambition.com:codeup/Codeup-Demo-123.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@codeup.teambition.com:codeup/Codeup-Demo-123.git'
misha-MacBookPro:Codeup-Demo-123 teambition$

当提交邮箱不符合规则时,会出现如下报错:

misha-MacBookPro:Codeup-Demo-123 teambition$ git push
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 238 bytes | 238.00 KiB/s, done.
Total 2 (delta 1), reused 0 (delta 0)
remote: master:推送规则检查不通过!提交作者邮箱 xxx@alibaba-inc.com 不符合正则表达式 @alibaba.com。
remote: 修改方法参见:http://t.tb.cn/30VwoIifScyCkxCeltF4UP
remote: 如需修改检查规则,请联系代码库管理员处理
To codeup.teambition.com:codeup/Codeup-Demo-123.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@codeup.teambition.com:codeup/Codeup-Demo-123.git'
misha-MacBookPro:Codeup-Demo-123 teambition$

当代码属主检查失败,出现如下报错:

remote: master:推送规则检查不通过!提交记录作者 (Author) 邮箱 xxx@alibaba-inc.com 与提交用户 xxx@alibaba-inc.com
不一致。
remote: 修改方法参见:xxx
remote: 如需修改检查规则,请联系代码库管理员处理

修改已提交的历史注释

请参见:如何修改提交历史信息 ?