如何获得 git.gitTagToVersionNumber 值?

How to get git.gitTagToVersionNumber value?

我正在使用 https://github.com/sbt/sbt-git and https://sbt-native-packager.readthedocs.io/en/stable/index.html 并想将 git.gitTagToVersionNumber 的值分配给我的 docker 容器。

我试过了:

git.useGitDescribe := true

Docker / dockerAlias := DockerAlias(None, Some("zerocoder"), (packageName in Docker).value, git.gitTagToVersionNumber.value)  

不行,因为DockerAlias最后一个参数的类型不匹配。

如何获取值git.gitTagToVersionNumber

我也试过:

git.useGitDescribe := 真

git.formattedShaVersion := git.gitTagToVersionNumber.value("tag")
Docker / dockerAlias := DockerAlias(None, Some("zerocoder"), (packageName in Docker).value, git.gitDescribedVersion.value) 

但它没有提供所需的值。我想标记我的 docker 容器,例如:

v0.2.0-2-g8d5cd83

这是一个使用GitTagToVersionNumber的例子:

git.useGitDescribe := true
git.gitDescribePatterns := Seq("v*.*")
git.gitTagToVersionNumber := { tag :String =>

val branchTag = if (git.gitCurrentBranch.value == "master") "" else "-" + git.gitCurrentBranch.value
val uncommit = if (git.gitUncommittedChanges.value) "-U" else ""

tag match {
    case v if v.matches("v\d+.\d+") => Some(s"$v.0${branchTag}${uncommit}".drop(1))
    case v if v.matches("v\d+.\d+-.*") => Some(s"${v.replaceFirst("-",".")}${branchTag}${uncommit}".drop(1))
    case _ => None
}}

不要忘记您需要创建一个类似 v1.0 的标签(git tag v1.0 在您当前的分支上)才能看到上面的代码工作,因为它是从 git 读取的。如果您正在远程测试此功能,请不要忘记执行 git push --tags.

以上示例提供:

  • semver 兼容的自然版本控制,例如 1.0.0 有 minor/major 个部分。
  • Git SHA 用于准确理解代码的作用。 (不包括实际标记适用于当前 SHA 的地方)
  • v1.0 的主要部分来自您需要创建的手动创建标签,最后一部分(例如 1.0.3-xxx 中的 .3)来自自动计算您来自标签 v1 的提交次数.0。因此,与标记每个次要版本相比,它更不容易受到人为错误的影响。
  • 如果存储库有修改,则添加 -U,因此代码不一定可重新创建。
  • 如果您不在主分支上,它会添加分支名称。

这是一个 complete working example,但可能您还没有在 build.sbt` 的项目部分启用 GitVersioning 插件。