git - 如何获取 git.gitTagToVersionNumber 值?
问题描述
我正在使用https://github.com/sbt/sbt-git和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 := 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
解决方案
这是一个使用示例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
,因此代码不一定是可重新创建的。 - 如果您不在主分支上,它会添加分支名称。
这是一个完整的工作示例,但可能您尚未GitVersioning
在 build.sbt 的项目部分启用插件。
推荐阅读
- android - 从谷歌地图获取步行指令并将该指令存储为字符串
- doctrine - 安装后Akeneo错误/缓存错误
- javascript - 使用 HTML 下拉菜单显示默认值
- python - 更新与 pip3.7 关联的 python
- npm - 等待 husky commit-msg hook 完全完成并运行 Enquirer
- ruby-on-rails - Amazon ECS docker 日志从一开始就将日志配置设置为默认值
- c# - Asp.Net(旧):不支持请求的安全协议
- javascript - 如何迭代循环并从重复中返回原始数据值
- node.js - Nodejs - 如何跟踪错误?
- colors - 暗模式下的颜色不如预期