版本不会自动增加

zer*_*ing 1 git scala sbt sbt-git

我正在使用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)  
Run Code Online (Sandbox Code Playgroud)

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

我究竟做错了什么?

Val*_*Dia 5

简短的答案是:

  1. build.sbt文件中删除/忽略显式设置版本(即此语句version := "0.1.0"
  2. 创建一个git标签以设置所需的版本(以v开头),例如,参见doc
>git tag -a v0.2.0  -m "my version 0.2.0"
Run Code Online (Sandbox Code Playgroud)

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

>sbt version
// Displays
// [info] 0.2.0
Run Code Online (Sandbox Code Playgroud)

这里有一些解释:

因此工作的方式sbt-git是,它为您设置了sbt构建的版本(通过运行获得的版本sbt version)。为此,它遵循一些规则,这是第2 条规则

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

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

如果要删除该行version := "0.1.0"),则将应用规则2,概括地说,规则2查找the tag并返回第一个匹配gitTagToVersionNumberSetting的字符串,默认情况下,该字符串是一个v以数字开头和后跟数字的字符串。

因此,本质上是要0.2.0使用插件将项目设置为版本,您必须在head commit v0.2.0git 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版本。