版本控制不会自动递增

Versioning does not increment automatically

我正在使用 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"
  2. 创建一个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 个:

  1. Looks at version-property setting (default to project.version), and checks the sys.props to see if this has a value. If so, use it.
  2. Otherwise, looks at the project tags. The first to match the gitTagToVersionNumberSetting is used to assign the version. The default is to look for tags that begin with v and a number, and use the number as the version. If there are multiple version tags, it will pick the highest.

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

如果您要删除该行 (version := "0.1.0"),则适用规则 2,简而言之,查找 tag 和 return 第一个匹配 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),一旦您在最新提交之上创建相应的标签- 假设标签 v0.3.0 - 然后 plugin 会选择它(应用规则 2)并将其设置为项目的版本(你可以通过 运行 看到sbt version,如前所述)。

您基本上可以使用此流程来使您的项目版本跟随您的 (git) tags 版本。