git - 使用gitversion修复错误后如何自动增加补丁版本

标签 git versioning git-flow gitversion

概括
我正在建立一个新项目并想使用 GitVersion 来计算我的应用程序的当前版本。我需要的是带有 MAJOR.MINOR.PATCH 的语义版本控制,其中 MAJOR 和 MINOR 随发布分支名称而增加,并且 PATCH 在每个错误修复或修补程序 merge 时增加。
目前我正在尝试将 GitFlow 实现到我的分支策略中,但我会向您解释我在做什么。

  • 所有开发都在 develop 分支上完成(创建一个 feature/* 分支并在 develop 中 merge 。
  • 当我想创建一个版本时,我从 develop
  • 创建了一个发布/[版本] 分支。
  • 当我在发行版中发现错误时,我会创建一个 bugfix/* 分支,并在完成后将其 merge 回 release/[version]。
  • 当没有发现更多错误时,releases/[version] 将 merge 到 master 中并标记为正确的版本。

  • 问题出在第 3 步。例如,当我在版本/0.1.0 上时,GitVersion 在 bugfix/* merge 后不会增加 PATCH 版本。它只是停留在 0.1.0 而不是想要的 0.1.1。它确实增加了提交计数!
    迄今为止采取的步骤
    目前我正在使用以下 gitversion.yml 文件(见下一个标题)。其中包括一个应该增加 PATCH 的修补程序分支。出于某种原因,在我创建 bugfix/* 分支后,当您在 bugfix 分支上运行 GitVersion 时,它不会增加 PATCH,所以我想我在这里遗漏了一些东西。
    唯一有效的是在 bugfix/* 分支中的最后一次提交上设置一个标签到新版本(0.1.1-test)。但是由于 GitVersion 在 bugfix 分支上计算版本 0.1.0,我无法自动升级 PATCH 并在提交时添加所需的 0.1.1-test 标签。
    我还认为当您 merge 回发布分支时,GitVersion 会增加版本。但即使我将增量设置为 Patch,这种情况也不会发生。所以在这里,我想我错过了一些东西,或者我只是想要一些 GitVersion 不适合的东西。
    gitversion.yml
    assembly-versioning-scheme: MajorMinorPatch
    mode: ContinuousDeployment
    branches:
      develop:
        tag: ''
      feature:
        tag: ''
      release:
        tag: test
        increment: Patch
        tracks-release-branches: true
        source-branches:
        - develop
        - bugfix
      bugfix:
        tag: ''
        increment: Patch
        prevent-increment-of-merged-branch-version: false
        regex: bugfix(es)?[/-]
        source-branches:
        - release
    ignore:
      sha: []
    
    预期结果
    当我将 bugfix/* 分支 merge 回我的 release/[version] 分支时,我希望增加 PATCH。
    例子:
    7f8ef13 34 minutes ago  (HEAD -> releases/0.1.0) [3]
    |\
    | * 3363677 34 minutes ago  (bugfix/TE-01) [2]
    |/
    * ac22ccb 36 minutes ago  (tag: 0.1.0-test, master, develop) [1]
    
    [1] 此时我创建了releases/0.1.0 分支,所以GitVersion 应该计算0.1.0(这是有效的!)
    [2] 这里的版本并不重要所以它可以保持 0.1.0-bug
    [3] 这里的版本需要增加到 0.1.1,因为我们有一个错误修复 merge 。 (这不会发生!)。目前它保持 0.1.0 但它确实增加了提交计数。所以它会在 [1] 和 [3] 之间从 0.1.0-test.0 到 0.1.0-test.2。
    也许我正在尝试做一些甚至不可能的事情,我真的不知道。因此,如果有人有任何想法,请随时回复:)
    我也知道 GitFlow 默认没有错误修复分支。但是我认为直接在发布分支上修复错误是一个奇怪的想法。尤其是当您在更大的团队中工作时。这就是我尝试创建错误修复流程的原因。
    完整的 gitversion -diag 输出
    C:\Testig gitversion>gitversion -diag
    INFO [05/08/19 10:38:53:79] Dumping commit graph:
    INFO [05/08/19 10:38:53:90] *   7f8ef13 49 minutes ago  (HEAD -> releases/0.1.0)
    |\
    | * 3363677 49 minutes ago  (bugfix/TE-01)
    |/
    * ac22ccb 50 minutes ago  (tag: 0.1.0-test, master, develop)
    
    INFO [05/08/19 10:38:53:90] Working directory: C:\Testig gitversion
    INFO [05/08/19 10:38:53:91] IsDynamicGitRepository: False
    INFO [05/08/19 10:38:53:93] Returning Project Root from DotGitDirectory: C:\Testig gitversion\.git - C:\Testig gitversion
    INFO [05/08/19 10:38:53:94] Running on Windows.
    INFO [05/08/19 10:38:53:94] IsDynamicGitRepository: False
    INFO [05/08/19 10:38:53:94] Returning Project Root from DotGitDirectory: C:\Testig gitversion\.git - C:\Testig gitversion
    INFO [05/08/19 10:38:53:94] Project root is: C:\Testig gitversion
    INFO [05/08/19 10:38:53:94] DotGit directory is: C:\Testig gitversion\.git
    INFO [05/08/19 10:38:53:95] IsDynamicGitRepository: False
    INFO [05/08/19 10:38:53:95] Returning Project Root from DotGitDirectory: C:\Testig gitversion\.git - C:\Testig gitversion
    INFO [05/08/19 10:38:53:98] IsDynamicGitRepository: False
    INFO [05/08/19 10:38:53:98] Returning Project Root from DotGitDirectory: C:\Testig gitversion\.git - C:\Testig gitversion
    INFO [05/08/19 10:38:54:07] Using latest commit on specified branch
    INFO [05/08/19 10:38:54:08] Running against branch: releases/0.1.0 (7f8ef13e5f43d3827d30a25f936424210cefb2c8)
    INFO [05/08/19 10:38:54:09] Begin: Calculating base versions
      INFO [05/08/19 10:38:54:10] Fallback base version: 0.1.0 with commit count source ac22ccb4dd8937a5ec46ad1504281aee490b4411 (Incremented: None)
      INFO [05/08/19 10:38:54:15] Git tag '0.1.0-test': 0.1.0-test with commit count source ac22ccb4dd8937a5ec46ad1504281aee490b4411 (Incremented: 0.1.0-test)
      INFO [05/08/19 10:38:54:17] Begin: Finding branch source of 'releases/0.1.0'
        INFO [05/08/19 10:38:54:18] Begin: Finding merge base between 'releases/0.1.0' and 'develop'.
          INFO [05/08/19 10:38:54:19] Found merge base of ac22ccb4dd8937a5ec46ad1504281aee490b4411
          INFO [05/08/19 10:38:54:19] Merge base of releases/0.1.0' and 'develop is ac22ccb4dd8937a5ec46ad1504281aee490b4411
        INFO [05/08/19 10:38:54:19] End: Finding merge base between 'releases/0.1.0' and 'develop'. (Took: 5.00ms)
        INFO [05/08/19 10:38:54:19] Begin: Finding merge base between 'releases/0.1.0' and 'master'.
          INFO [05/08/19 10:38:54:19] Found merge base of ac22ccb4dd8937a5ec46ad1504281aee490b4411
          INFO [05/08/19 10:38:54:19] Merge base of releases/0.1.0' and 'master is ac22ccb4dd8937a5ec46ad1504281aee490b4411
        INFO [05/08/19 10:38:54:19] End: Finding merge base between 'releases/0.1.0' and 'master'. (Took: 0.96ms)
        INFO [05/08/19 10:38:54:19] Begin: Finding merge base between 'releases/0.1.0' and 'releases/0.1.0'.
          INFO [05/08/19 10:38:54:19] Found merge base of 7f8ef13e5f43d3827d30a25f936424210cefb2c8
          INFO [05/08/19 10:38:54:19] Merge base of releases/0.1.0' and 'releases/0.1.0 is 7f8ef13e5f43d3827d30a25f936424210cefb2c8
        INFO [05/08/19 10:38:54:19] End: Finding merge base between 'releases/0.1.0' and 'releases/0.1.0'. (Took: 1.00ms)
        INFO [05/08/19 10:38:54:20] Multiple source branches have been found, picking the first one (develop).
    This may result in incorrect commit counting.
    Options were:
     develop, master
      INFO [05/08/19 10:38:54:25] End: Finding branch source of 'releases/0.1.0' (Took: 85.80ms)
      INFO [05/08/19 10:38:54:33] Version in branch name: 0.1.0 with commit count source ac22ccb4dd8937a5ec46ad1504281aee490b4411 (Incremented: None)
      INFO [05/08/19 10:38:54:35] Begin: Finding merge base between 'releases/0.1.0' and 'releases/0.1.0'.
        INFO [05/08/19 10:38:54:38] Found merge base of 7f8ef13e5f43d3827d30a25f936424210cefb2c8
        INFO [05/08/19 10:38:54:42] Merge base of releases/0.1.0' and 'releases/0.1.0 is 7f8ef13e5f43d3827d30a25f936424210cefb2c8
      INFO [05/08/19 10:38:54:45] End: Finding merge base between 'releases/0.1.0' and 'releases/0.1.0'. (Took: 106.84ms)
      INFO [05/08/19 10:38:54:47] Git tag '0.1.0-test': 0.1.0-test with commit count source ac22ccb4dd8937a5ec46ad1504281aee490b4411 (Incremented: 0.1.0-test)
      INFO [05/08/19 10:38:54:49] Found multiple base versions which will produce the same SemVer (0.1.0), taking oldest source for commit counting (Version in branch name)
      INFO [05/08/19 10:38:54:53] Base version used: Version in branch name: 0.1.0 with commit count source ac22ccb4dd8937a5ec46ad1504281aee490b4411 (Incremented: None)
    INFO [05/08/19 10:38:54:53] End: Calculating base versions (Took: 448.82ms)
    INFO [05/08/19 10:38:54:58] Skipping version increment
    INFO [05/08/19 10:38:54:60] 2 commits found between ac22ccb4dd8937a5ec46ad1504281aee490b4411 and 7f8ef13e5f43d3827d30a25f936424210cefb2c8
    INFO [05/08/19 10:38:54:64] Begin: Getting version tags from branch 'refs/heads/releases/0.1.0'.
    INFO [05/08/19 10:38:54:68] End: Getting version tags from branch 'refs/heads/releases/0.1.0'. (Took: 46.60ms)
    
    最后,您可以看到它正在跳过版本增量。但我不知道为什么。

    最佳答案

    这可能是因为 GitVersion 任务中的错误。

    我在 GitVersion 任务 v5.0.1 中遇到了类似的错误,它是 Azure DevOps 管道中的默认版本。无论我对 master 分支做了什么,GitVersion 每次都给我相同的版本。我的策略是 主线 .

    我用过 this使用此任务设置的名为 UseGitVersion 的 GitVersion 版本:

    # Temporary fix to update GitVersionProperly
    - task: UseGitVersion@5
      inputs:
        versionSpec: '0.0.0'
    

    这个设置安装了 GitVersion 任务工具的 v5.1.2,它产生了正确的版本控制,或者至少根据我对这个过程的期望和理解。

    关于git - 使用gitversion修复错误后如何自动增加补丁版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56036797/

    相关文章:

    javascript - jQuery 文件名

    elasticsearch - 弹性 - 防止更新文档

    api - 变量名称更改会影响 SemVer 主要还是次要?

    atlassian-sourcetree - 无法使用 SourceTree 初始化 git-flow

    Gitflow 和意外 merge 其他功能

    git - 新文件未显示在 git status 中

    git - Cherry-pick 一个 pull request 到一个分支?

    git - git am 和 git apply 有什么区别?

    git - git "dirty"是否意味着文件未暂存或未提交? (词汇​​冲突)

    git - 使用 Git 特性分支工作流,什么时候更新 master 分支?