13

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

例子:

  • 开发/dparkar/addauth/ta123456
  • 高频/jsmith/memoryleak/bu11111

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

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

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

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

4

3 回答 3

7

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

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

于 2019-05-07T06:30:55.437 回答
6

有两种 git 钩子:

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

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

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

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

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

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

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

于 2017-12-06T02:50:23.457 回答
1

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

      - 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
于 2021-06-25T13:02:41.173 回答