【问题标题】:On GitHub, is it possible to deny a push based on the title of the commits?在 GitHub 上,是否可以根据提交的标题拒绝推送?
【发布时间】:2020-09-29 04:16:15
【问题描述】:

在我们的项目中,我们通常使用 rebase-and-push 工作流程。不同分支上的大功能通过 GitHub 的 UI 进行合并,显示为“Merge pull request”。

有时我们中的一个人做错了事,最后会提交一个看起来像“合并远程跟踪分支'origin/master'”的提交。如果推送包含标题中带有“合并远程跟踪分支”的提交,我们有什么方法可以自动拒绝推送到 master?

【问题讨论】:

  • 你在使用 GitHub 企业版吗?

标签: git github push


【解决方案1】:

正如其他人所提到的,您可以在 GitHub Enterprise 中使用 pre-receive 挂钩,但不能在 GitHub.com 中使用。那是因为pre-receive 钩子是任意代码,GitHub 在他们的服务器上运行你的任意代码是没有意义的。

您可以使用分支保护并要求拉取请求合并到某些分支,然后使用 GitHub Actions(或其他一些 CI 工具)拒绝包含合并的分支。这是大多数团队用来处理拒绝不符合某些标准的提交的典型方法。

【讨论】:

    【解决方案2】:

    一个预接收钩子,例如:

    #!/bin/sh
    
    while read from to ref; do
        git log --format=%B -n 1 "$to" \
            | if grep -q pattern; then exit 1; fi
    done
    

    将拒绝主题与模式匹配的任何提交。你几乎可以肯定地让它做你想做的事(例如,使用grep "Merge remote-tracking branch")。有关详细信息,请参阅githooks(5)

    【讨论】:

      【解决方案3】:

      考虑到 GitHub 操作尚不支持预接收挂钩类型的操作,如 mentioned here,您需要:

      注意:2020 年 9 月:GitHub Actions 开始使用 available for GHE (GitHub Enterprise) in beta


      注意Dec. 4th 2019,您可以通过启用Require linear history 拒绝任何包含合并提交的推送来保护分支。


      【讨论】:

      • 啊!每次我开始认为 github 可能值得使用时,我都会阅读类似的内容,并真正想知道它为什么存在。但我想这就是企业版的用途。
      • 公平地说,这几乎不是必需的功能,它只是一个不错的功能。
      猜你喜欢
      • 2017-02-07
      • 2022-01-19
      • 1970-01-01
      • 2012-07-24
      • 2011-12-24
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多