1

我的构建团队目前已设置我们的分支名称以遵循约定 Feature_*、Bugfix_*、Hotfix_*、Release_*。进行谷歌搜索时,我看到典型的命名约定使用所有小写字母,其中每个分支类型都使用破折号('-')或文件夹('/')标记,而不是我在这里使用的下划线('_')分隔符。在大多数情况下,我可以在 Gitversion.yml 文件中使用正则表达式,以便 gitversion 可以正确识别分支类型。

但是,发布分支和 GitVersion 工具从分支名称中获取版本号的能力存在问题。这里似乎 Gitversion 工具只能在命名约定匹配release/<version>release-<version>. 但是如果我改为使用Release_<version>它,它将不会解析分支名称来获取新版本#。我已经问过构建团队我们是否可以在这里切换命名约定,但他们不愿更改命名约定,因为这可能会影响许多其他 repos 及其 Jenkins 配置。

有什么方法可以让 Gitversion 工具知道我的命名约定Release_<version>并相应地削减版本号 - 无论是使用 Gitversion.yml 还是其他方式?

我已经用正则表达式修改了 GitVersion.yml 来识别发布分支,这在识别什么是发布分支时可以正常工作。但它不会从分支名称解析建议的版本。

我的 GitVersion.yml

mode: ContinuousDelivery
branches:
  master:
    regex: master
    tag: ''
    is-release-branch: false
    prevent-increment-of-merged-branch-version: true
    track-merge-target: false
    tracks-release-branches: false
  release:
    regex: Release_
    tag: ''
    is-release-branch: true
    is-mainline: true
    prevent-increment-of-merged-branch-version: true
    track-merge-target: false
    tracks-release-branches: false
    source-branches: ['develop']
  feature:
    regex: Feature_
    is-release-branch: false
    prevent-increment-of-merged-branch-version: false
    track-merge-target: false
    tracks-release-branches: false
  pull-request:
    regex: (pull|pull\-requests|pr)[/-]
    is-release-branch: false
    prevent-increment-of-merged-branch-version: false
    track-merge-target: false
    tracks-release-branches: false
  hotfix:
    regex: Hotfix_
    is-release-branch: false
    prevent-increment-of-merged-branch-version: false
    track-merge-target: false
    tracks-release-branches: false
  develop:
    regex: develop
    mode: ContinuousDeployment
    is-release-branch: false
    prevent-increment-of-merged-branch-version: false
    track-merge-target: true
    tracks-release-branches: true
ignore:
  sha: []
merge-message-formats: {}

我希望如果我提供 Release_0.99.1 的分支名称,我应该获得 0.99.1 的版本号。而不是获得 0.1.0 的版本号。

4

2 回答 2

0

更新你regex的分支。例如,对于发布分支,以下其中一项应该可以工作(按照我尝试这些的顺序):

  • regex: ^Release[_-/]
  • regex: ^Release_[-/]?
  • regex: ^Release[-/]?
  • regex: ^Release[-/]?_

如果您想更具体一点,以确保有人没有名为类似的分支Release_something_to_develop,那么我可能会尝试使用上面的第一个或最后一个附加限定符:

  • regex: ^Release[_-/]\d+\.\d+\.\d+
  • regex: ^Release[-/]?_\d+\.\d+\.\d+

这些并不是万无一失的,因为正则表达式是“开放式的”(除非您使用上述两个之一并将 a 附加$到正则表达式的末尾)。但是不太可能有人会命名他们的分支Release_0.0.1_to_production....

于 2020-03-10T14:57:08.117 回答
0

GitVersion 中的代码似乎确实在发布版本号之前检查了“-”或“/”作为分隔符,因此在更改之前,您必须在用作发布分支前缀的任何内容之后添加一个或其他。要使用您的示例,请将 Release_0.99.1 更改为 Release_-0.99.1。它看起来不太好,但应该提取版本。您可能还想在配置中更改发布分支的正则表达式。

我认为这是 GitVersion 中的一个错误,因为文档确实暗示您的方法应该有效。

于 2019-08-14T11:10:21.773 回答