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

dpa*_*kar 7 git branch pull-request azure-devops azure-repos

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

例子:

  • dev / dparkar / addauth / ta123456
  • 高频/史密斯/内存泄漏/ bu11111

分支命名约定使我们可以清楚地了解它是常规开发分支还是修补程序分支,以及与之关联的工作项。

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

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

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

Mar*_*Liu 6

有两种 git 钩子:

  • 客户端 hooks,适用于本地 git repo。
  • 服务器端 hooks,适用于远程仓库(如您所用的 VSTS git repo)。

更多关于 git hooks 的细节,你可以参考git book 中的Customizing Git - Git Hooks

目前,VSTS git repo 仅支持客户端挂钩(例如 pre-push hook、pre-commit hook 等)。

VSTS git repo的服务器端钩子现在不可用(但已经在我们的待办事项中),您也可以在此用户语音中找到它。一旦服务器端挂钩将来可用,例如您可以使用 pre-receive hook(或 post-receive hook)来检查和强制转换远程 repo 中的分支名称。

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

在VSTS服务Hooks Tab中添加一个web hook -> Trigger by code push event -> 输入你自己的网站url -> Test -> 确保它可以连接成功-> Finish。

一旦将新更改推送到 VSTS git repo,将触发 web 挂钩,并将信息发送到您的网站。然后您可以在您的网站中检查并转换分支名称并再次推送。


Dav*_*ner 6

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

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


Ed *_*all 5

我在构建级别强制执行它,如果分支与所需模式不匹配,则使构建管道失败。这样做效率有点低,但只要 PR 合并规则规定管道必须成功,人们很快就会明白。
将此任务添加到管道中(尽早,但需要在结账之后):

      - 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
Run Code Online (Sandbox Code Playgroud)