版本控制不会自动递增
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”。
我做错了什么?
简短的回答是:
- 从您的
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 个:
- 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.
- 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
版本。
我正在使用 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”。
我做错了什么?
简短的回答是:
- 从您的
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 个:
- 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.
- 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
版本。