【问题标题】:How to get git.gitTagToVersionNumber value?如何获取 git.gitTagToVersionNumber 值?
【发布时间】:2019-10-28 12:06:11
【问题描述】:

我正在使用 https://github.com/sbt/sbt-githttps://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 := true

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

【问题讨论】:

  • 运行sbt "show version"会得到什么?
  • 我有[IJ]sbt:plugger> show version [info] 0.2.0-2-g8d5cd83-SNAPSHOT
  • 但我想将我的包或 docker 容器标记如下:v0.2.0-2-g8d5cd83

标签: git scala sbt-native-packager sbt-git


【解决方案1】:

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

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

【讨论】:

  • 我已经完成了如下操作:git.gitTagToVersionNumber := { tag: String => if (tag.isEmpty) None else Some(tag.split("-").toList.head) } 并且我得到了v0.2.0-SNAPSHOT。如何删除 SNAPSHOT 部分?它应该只显示v0.2.0
  • 要删除快照添加这一行:git.uncommittedSignifier := None
  • @michael-mior:请不要删除工作示例的链接。配置需要 project/ 中的文件才能完全理解解决方案,因此将链接的内容复制并粘贴到 stackoverflow 中会使许多人没有完整的工作示例,因此无法使解决方案正常工作。
  • @Philluminati 该链接有点欺骗性,因为它说它导致了一个完整的工作示例。我已重做编辑以包含其他小修复。
猜你喜欢
  • 2012-04-13
  • 2021-03-27
  • 2012-10-20
  • 2011-11-19
  • 2016-08-17
  • 2015-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多