如何在gitversion修复错误后自动增加补丁版本 总结

如何在gitversion修复错误后自动增加补丁版本 总结,git,versioning,git-flow,gitversion,Git,Versioning,Git Flow,Gitversion,我正在设置一个新项目,希望使用GitVersion计算我的应用程序的当前版本。我需要的是使用MAJOR.MINOR.PATCH进行语义版本控制,其中MAJOR和MINOR随着发行版分支名称的增加而增加,而补丁在每次错误修复或热修复合并时都会增加 目前,我正试图将GitFlow实现到我的分支策略中,但我将向您解释我正在做的事情 所有的开发都在开发分支上完成(创建一个feature/*分支并合并回develope) 当我想创建一个发行版时,我从develope创建一个releases/[versio

我正在设置一个新项目,希望使用GitVersion计算我的应用程序的当前版本。我需要的是使用MAJOR.MINOR.PATCH进行语义版本控制,其中MAJOR和MINOR随着发行版分支名称的增加而增加,而补丁在每次错误修复或热修复合并时都会增加

目前,我正试图将GitFlow实现到我的分支策略中,但我将向您解释我正在做的事情

  • 所有的开发都在开发分支上完成(创建一个feature/*分支并合并回develope)
  • 当我想创建一个发行版时,我从develope创建一个releases/[version]分支
  • 当我在发行版中发现一个bug时,我会创建一个bug修复/*分支,并在完成后将其合并回发行版/[version]
  • 当没有发现更多的bug时,版本/[version]将合并到master中,并用正确的版本进行标记
  • 问题出现在第3步。例如,当我在发布/0.1.0版本时,GitVersion不会在错误修复/*合并后增加修补程序版本。它只是停留在0.1.0而不是想要的0.1.1。它确实会增加提交计数

    迄今采取的步骤 目前,我正在使用下面的gitversion.yml文件(请参阅下一个标题)。其中包括一个热修复程序分支,该分支应增加补丁程序。出于某种原因,在我创建bugfix/*分支后,当您在bugfix分支上运行gitversion时,它不会增加补丁程序,因此我认为我缺少了一些东西

    唯一有效的方法是在bugfix/*分支的最后一次提交时设置一个标记到新版本(0.1.1-test)。但是由于GitVersion在bugfix分支上计算0.1.0版,我无法自动升级补丁并在提交时添加所需的0.1.1-test标记

    我还认为GitVersion会在合并到发布分支时增加版本。但是,即使我将增量设置为Patch,这种情况也不会发生。因此,我也认为我错过了一些东西,或者我只是想要一些GitVersion不适合的东西

    gitversion.yml 预期结果 当我将bugfix/*分支合并回我的releases/[version]分支时,我希望增加补丁

    例如:

    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,因为我们有一个错误修复合并。(这没有发生!)。目前它保持在0.1.0,但它确实增加了提交计数。因此它将从0.1.0-test.0增加到0.1.0-test.2,介于[1]和[3]之间

    也许我想做一些根本不可能的事情,我真的不知道。所以,如果有人有想法,请随时回复:)

    我还知道GitFlow默认情况下没有bug修复分支。但我认为直接在发布分支上修复bug是一个奇怪的想法。尤其是当你在一个更大的团队中工作时。这就是我试图创建错误修复流的原因

    完整版本-诊断输出
    最后,您可以看到它正在跳过版本增量。但我不知道为什么。

    这可能是因为GitVersion任务中存在错误

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

    我已将名为UseGitVersion的GitVersion版本用于此任务设置:

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

    此安装程序安装了GitVersion任务工具的v5.1.2,并生成了正确的版本控制,或者至少符合我对流程的预期和理解。

    GitVersion是一个遵循gitflow分支策略的工具,但您没有遵循gitflow分支策略,因此,版本并没有像您预期的那样递增。修补程序版本仅在从主分支而不是从发布分支获取修补程序分支时才会增加。可能是GitVersion不是你想要做的事情的工具。但是,在每次发布时使用配置增加补丁是否应该是正常的行为?简单的回答是,我不知道。我个人没有使用过这样的配置。
    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)
    
    # Temporary fix to update GitVersionProperly
    - task: UseGitVersion@5
      inputs:
        versionSpec: '0.0.0'