版本控制不会自动增加

Posted

技术标签:

【中文标题】版本控制不会自动增加【英文标题】:Versioning does not increment automatically 【发布时间】:2019-10-11 23:12:35 【问题描述】:

我正在使用https://github.com/sbt/sbt-git 来获得自动版本控制的好处,如使用 Git 进行版本控制部分中的描述。

我的build.sbt 文件如下所示:

version := "0.1.0"

scalaVersion := "2.12.8"

scalacOptions ++= Seq(
  "-encoding", "UTF-8", // source files are in UTF-8
  "-deprecation", // warn about use of deprecated APIs
  "-unchecked", // warn about unchecked type parameters
  "-feature", // warn about misused language features
  "-language:higherKinds", // allow higher kinded types without `import scala.language.higherKinds`
  "-Xlint", // enable handy linter warnings
  "-Xfatal-warnings", // turn compiler warnings into errors
  "-Ypartial-unification" // allow the compiler to unify type constructors of different arities
)

scalacOptions in(Compile, console) ~= 
  _.filterNot(Set("-Xlint"))


libraryDependencies ++= Seq(
  "org.typelevel" %% "cats-core" % "1.6.0",
  "ch.qos.logback" % "logback-classic" % "1.2.3",
  "com.typesafe.scala-logging" %% "scala-logging" % "3.9.2"
)

libraryDependencies ++= Seq(
  "org.scalacheck" %% "scalacheck" % "1.14.0" % "test",
  "org.scalactic" %% "scalactic" % "3.0.6" % "test",
  "org.scalatest" %% "scalatest" % "3.0.6" % "test"
)

libraryDependencies ++= Seq(
  "com.typesafe.akka" %% "akka-slf4j" % "2.5.22",
  "ch.qos.logback" % "logback-classic" % "1.2.3"
)

libraryDependencies += "com.dimafeng" %% "testcontainers-scala" % "0.25.0" % "test"


enablePlugins(JavaServerAppPackaging)
enablePlugins(DockerPlugin)
enablePlugins(GitVersioning)
dockerExposedPorts := Seq(8080)
git.formattedShaVersion := git.gitHeadCommit.value map  sha =>
  s"$sha".substring(0, 7)


dockerUpdateLatest := true
dockerAlias := DockerAlias(None, Some("zerocoder"), (packageName in Docker).value, git.gitDescribedVersion.value)  

提交后,它不会自动从版本“0.1.0”增加到“0.2.0”。

我做错了什么?

【问题讨论】:

【参考方案1】:

简短的回答是:

    从您的build.sbt 文件中删除/省略显式设置版本(即此语句version := "0.1.0") 创建一个git标签来设置想要的版本(以v为前缀),例如见doc
>git tag -a v0.2.0  -m "my version 0.2.0"

然后您可以通过运行查看插件设置的版本:

>sbt version
// Displays
// [info] 0.2.0

这里有一点解释:

所以sbt-git 的工作方式是它为您设置 sbt 构建的版本(您通过运行sbt version 获得的版本)。为此,它遵循几个rules,这里是第2个:

    查看版本属性设置(默认为 project.version),并检查 sys.props 以查看它是否具有值。如果是这样,请使用它。 否则,查看项目标签。第一个匹配 gitTagToVersionNumberSetting 用于分配版本。默认是查找以 v 和数字开头的标签,并使用数字作为版本。如果有多个版本标签,它将选择最高的。

因此,在您的情况下,因为您在 build.sbt 中将 project version 明确设置为 0.1.0,所以运行 sbt version 会得到 0.1.0。即使在做了一些提交之后,sbt version 的值仍然是0.1.0,因为规则将适用(只要在您的build.sbt 中设置版本)。 请注意,插件不会更改该文件中设置的值,它只会在定义时使用它。

如果您要删除该行 (version := "0.1.0"),那么规则 2 将适用,简而言之,查找 tag 并返回第一个匹配 gitTagToVersionNumberSetting 的默认情况下是一个以v 开头并后跟一个数字的字符串。

因此,基本上要使用插件将您的项目设置为版本0.2.0,您必须在头部提交v0.2.0 之上创建一个标签(例如,运行git tag -a v0.2.0 -m "my version 0.2.0")。

当你开发你的项目时,会添加几个提交,直到你的版本0.3.0(或0.2.1),一旦你在最新提交之上创建了相应的标签——假设是标签@ 987654346@ - 然后plugin 会选择它(应用规则 2)并将其设置为项目的版本(如前所述,您可以通过运行 sbt version 看到)。

这是一个流程,您基本上可以使用该流程使您的项目版本跟随您的 (git) tags 版本。

【讨论】:

所以这里的想法是,插件不会更新build.sbt 中指定的版本,而是根本没有指定版本。相反,插件通过查看您的 git 状态来计算版本(在运行中,在每次构建开始时)。 我理解正确吗,当我提交时,它会自动计算版本? 我的意思是,例如当前标签是v0.2.0。然后我做了一些代码更改,提交它,然后我期望标签自动增加到0.3.0 @zero_coding,基本上是你在提交之上创建一个标签,插件将使用它来设置你的项目的版本 好东西 :)!

以上是关于版本控制不会自动增加的主要内容,如果未能解决你的问题,请参考以下文章

语义版本控制自动化

Maven 自动生成版本控制和变更日志

通过 npm 节点自动化 Git 提交 + 版本控制 + 标记

Visual Studio 2017 (.NET Core) 中的自动版本控制

启用版本控制后,Amazon S3 对存储桶请求的 HTTP 503 响应显著增加

多开发人员环境的 SVN 数据库版本控制