我正在尝试设置GitVersion来处理我们项目的语义版本控制(GitFlow),但是它并没有像我期望的那样自动递增。我也在努力阅读该项目的文档,这不是最容易遵循的。

基本上,我们希望使用Major.Minor.Patch约定建立一个版本控制系统,在该约定中,我们手动增加Major,在发行分支合并到master中时自动增加Minor,在将功能分支合并到developer中时自动增加Patch。

这是我当前的GitVersion.yml

mode: ContinuousDeployment
branches:
  feature:
    increment: Patch
    regex: feature?[/-]
  release:
    increment: Minor
    regex: release?[/-]
  develop:
    regex: develop$
  master:
    regex: master$
ignore:
  sha: []

为了测试它,我编写了一个小的ruby脚本来加快乏味的过程。我包括它只是为了确保以预期的方式使用GitVersion和GitFlow。
require "git"

def new_feature_branch i
  g = Git.open(Dir.pwd)

  branch_name = "feature/number-#{i}"
  g.checkout("develop")
  g.branch(branch_name).checkout

  open('README.md', 'a') do |f|
    f.puts "\r#{i}"
  end

  g.add("README.md")
  g.commit("##{i}")

  g.branch("develop").checkout
  g.merge(branch_name)
  g.branch(branch_name).delete

  print(`gitversion`)
end


new_feature_branch(ARGV[0])
gitversion的输出
{
  "Major":1,
  "Minor":1,
  "Patch":0,
  "PreReleaseTag":"alpha.39",
  "PreReleaseTagWithDash":"-alpha.39",
  "PreReleaseLabel":"alpha",
  "PreReleaseNumber":39,
  "WeightedPreReleaseNumber":39,
  "BuildMetaData":"",
  "BuildMetaDataPadded":"",
  "FullBuildMetaData":"Branch.develop.Sha.57a536a5c6b6abb4313a2067468413447cb49c86",
  "MajorMinorPatch":"1.1.0",
  "SemVer":"1.1.0-alpha.39",
  "LegacySemVer":"1.1.0-alpha39",
  "LegacySemVerPadded":"1.1.0-alpha0039",
  "AssemblySemVer":"1.1.0.0",
  "AssemblySemFileVer":"1.1.0.0",
  "FullSemVer":"1.1.0-alpha.39",
  "InformationalVersion":"1.1.0-alpha.39+Branch.develop.Sha.57a536a5c6b6abb4313a2067468413447cb49c86",
  "BranchName":"develop",
  "Sha":"57a536a5c6b6abb4313a2067468413447cb49c86",
  "ShortSha":"57a536a",
  "NuGetVersionV2":"1.1.0-alpha0039",
  "NuGetVersion":"1.1.0-alpha0039",
  "NuGetPreReleaseTagV2":"alpha0039",
  "NuGetPreReleaseTag":"alpha0039",
  "VersionSourceSha":"27938c50fc6f364eff52bccec8dbc10297bce87b",
  "CommitsSinceVersionSource":39,
  "CommitsSinceVersionSourcePadded":"0039",
  "CommitDate":"2019-10-28"
}

我希望每次将功能分支合并到开发中时,补丁号都会增加,但是这种情况没有发生。

最佳答案

这并不是一个真正的答案,因为您想使用gitversion,但也许它显示了另一种处理问题的方式,并且注释太长:

  • 将带有以下内容的文件“pre-commit”放入/.git/hooks/
  • 在我们的案例中,我们正在使用R,并且在软件包文件夹中的“DESCRIPTION”文件中对版本进行“跟踪”(这就是为什么我要求提供文件以及如何调用该文件。

  • 如果您随后提交,则补丁增加+1,必须以x + 1.0.-1(获得x + 1.0.0)的方式手动设置次要/主要版本。我想您应该能够使脚本适应您的需求。

    希望能有所帮助。
    #!C:/R/R-3.3.0/bin/x64/Rscript
    
    # License: CC0 (just be nice and point others to where you got this)
    # Author: Robert M Flight <[email protected]>, github.com/rmflight
    #
    # This is a pre-commit hook that checks that there are files to be committed, and if there are, increments the package version
    # in the DESCRIPTION file.
    #
    # To install it, simply copy this into the ".git/hooks/pre-commit" file of your git repo, change /path/2/Rscript, and make it
    # executable. Note that /path/2/Rscript is the same as your /path/2/R/bin/R, or may be in /usr/bin/Rscript depending on your
    # installation. This has been tested on both Linux and Windows installations.
    #
    # In instances where you do NOT want the version incremented, add the environment variable inc=FALSE to your git call.
    # eg "inc=FALSE git commit -m "commit message".
    # This is useful when you change the major version number for example.
    
    inc <- TRUE # default
    
    # get the environment variable and modify if necessary
    tmpEnv <- as.logical(Sys.getenv("inc"))
    if (!is.na(tmpEnv)) {
      inc <- tmpEnv
    }
    
    # check that there are files that will be committed, don't want to increment version if there won't be a commit
    fileDiff <- system("git diff HEAD --name-only", intern = TRUE)
    
    if ((length(fileDiff) > 0) && inc) {
    
      currDir <- getwd() # this should be the top level directory of the git repo
      currDCF <- read.dcf("DESCRIPTION")
      currVersion <- currDCF[1,"Version"]
      splitVersion <- strsplit(currVersion, ".", fixed = TRUE)[[1]]
      nVer <- length(splitVersion)
      currEndVersion <- as.integer(splitVersion[nVer])
      newEndVersion <- as.character(currEndVersion + 1)
      splitVersion[nVer] <- newEndVersion
      newVersion <- paste(splitVersion, collapse = ".")
      currDCF[1,"Version"] <- newVersion
      currDCF[1, "Date"] <- strftime(as.POSIXlt(Sys.Date()), "%Y-%m-%d")
      write.dcf(currDCF, "DESCRIPTION")
      system("git add DESCRIPTION")
      cat("Incremented package version and added to commit!\n")
    }
    

    09-04 11:54