在 Azure DevOps 中强制使用分支命名约定 Git

Force a branch naming convention in Azure DevOps Git

我们使用 Git 托管在 Azure DevOps 中的所有源代码。到目前为止,我们已经使用 Git 钩子来确保团队成员遵循分支命名约定 {branchtype}/{username}/{friendlyname}/{workitemtype}{workitemid}.

示例:

分支命名约定让我们清楚地了解它是常规开发分支还是修补程序分支以及它与哪个工作项相关联等等。

要在本地设置 Git 挂钩,团队成员需要在开始贡献之前在本地 运行 脚本。这很好,因为脚本除了设置 Git Hooks 之外还进行了额外的设置。但我们不再需要额外的设置,因此我们希望完全删除该脚本。

有没有办法在服务器端强制使用分支命名约定?

我注意到有 Pull Request Status Server 的文档,但想知道是否有一些 OOTB 只需要在 Azure DevOps 中配置。

有两种 git 钩子:

  • 客户端挂钩,适用于本地 git 存储库。
  • 服务器端挂钩,适用于远程仓库(您使用的 VSTS git 仓库)。

更多关于git钩子的细节,你可以参考Customizing Git - Git Hooks在git书中。

目前,VSTS git 存储库仅支持客户端挂钩(例如预推挂钩、预提交挂钩等)。

服务器端挂钩现在不可用(但已经在我们的积压中)用于 VSTS git 存储库,您也可以在 this user voice.一旦将来服务器端挂钩可用,例如您可以使用预接收挂钩(或 post-接收挂钩)来检查并强制转换远程仓库中的分支名称。

此外,您问题中的 link 使用的是 VSTS web hook,这与 git hook 有很大不同。当然,您可以通过网络挂钩检查并强制转换分支名称,但您需要额外的网站来接收信息和转换分支名称。详细步骤如下:

在VSTS服务Hooks选项卡中添加web hook -> 通过代码推送事件触发 -> 输入你自己的网站url -> 测试 -> 确保可以连接成功 -> 完成。

将新更改推送到 VSTS git 存储库后,将触发网络挂钩,并将信息发送到您的网站。然后你可以在你的网站上查看并转换分支名称并再次推送。

TFS 2018 和 Azure Repos 允许您要求在文件夹中创建分支。

有关如何配置权限以启用此功能的说明,请参阅 https://docs.microsoft.com/en-us/azure/devops/repos/git/require-branch-folders?view=azure-devops

我通过在分支与所需模式不匹配时使构建管道失败来在构建级别强制执行它。这样做效率有点低,但人们很快就会学会。将此任务添加到管道(早期,但需要在结帐之后):

      - task: Bash@3
        displayName: Branch name check
        inputs:
          targetType: inline
          script: |
            echo "##[debug] BUILD_SOURCEBRANCH: [${BUILD_SOURCEBRANCH}]"
            BRANCH="${BUILD_SOURCEBRANCH#refs/heads/}"
            case ${BRANCH} in
              refs/*) ;; # PRs, merges, tags etc.
              release/*) ;;
              feature/*) ;;
              bugfix/*) ;;
              develop) ;;
              *)
                echo "##vso[task.logissue type=error]Branch name [${BRANCH}] does not follow convention: [bugfix/* | feature/* | release/* | develop]."
                echo "##vso[task.complete result=Failed;]"
                ;;
            esac