考虑在两个单独的存储库Pub和Priv中分发的软件。Pub存储库是公共的。私有已关闭。当任何一方发生更改时,连续集成服务器都会同时构建Pub和Priv。然后,它会从Priv创建可下载的二进制文件,供Pub用户使用。这些二进制文件在内部以及带有Subversion修订版的文件名上标记。
问题是:如何使从Pub生成的程序知道正确的,对应的Priv版本号,以便它们可以自动下载并运行?
当前的解决方案是让构建服务器修改Pub中的文件,以设置Priv的修订号并将这些更改提交给Pub。但是,这带来了两个重大问题:
该构建需要花费很长时间,因此,如果有人在构建期间将更改提交到Pub(或Priv),则会产生冲突。可以强制解决该问题,但是日志历史记录看起来很奇怪,好像这些修订使它进入了该内部版本一样。
Subversion日志中有许多条目,例如“自动构建更新了版本”。从每次构建运行开始都会污染本来有益的Subversion日志。
因此,我们可以通过不需要更改存储库的方式来做到这一点。
真诚的韦恩
我有一个设置,其中 nginx 提供所有静态内容(CSS/JS)。我们的问题是,当我们更新静态内容时,浏览器不一定会立即更新它们,这会导致我们在推送新版本时出现问题。
我想要一个 nginx 插件,它基本上可以替换对 CSS/JS 的所有调用,并添加一个版本号,如下所示:
前:
<link rel="stylesheet" type="text/css" href="/media/css/style.css" />
Run Code Online (Sandbox Code Playgroud)
后:
<link rel="stylesheet" type="text/css" href="/media/css/style.css?3428432" />
Run Code Online (Sandbox Code Playgroud)
并根据 style.css 文件本身的最新更改日期自动执行此操作。所以我不必更新 HTML。有这个插件吗?我知道谷歌的 mod_pagespeed 在他们的 apache2 模块中做了类似的事情......但我找不到任何人使用 nginx。
受这个SO问题的启发,我想使用相同的机制在我的golang应用程序中嵌入版本号。但是我正在使用Cobra命令行解析器,并希望有一个version子命令。这将导致以下目录和包结构:
.
|-- cmd
`-- version.go
|-- main.go
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经尝试了以下方法:
go run -ldflags "-X cmd/version.versionString=0.1.0" main.go version
Run Code Online (Sandbox Code Playgroud)
--
go run -ldflags "-X version.versionString=0.1.0" main.go version
Run Code Online (Sandbox Code Playgroud)
--
go run -ldflags "-X version.VersionString=0.1.0" main.go version
Run Code Online (Sandbox Code Playgroud)
随着version.go包含像这样的变量声明:
var versionString string
Run Code Online (Sandbox Code Playgroud)
和
var VersionString string
Run Code Online (Sandbox Code Playgroud)
分别。
我也尝试过将变量声明放进去,main.go但是我不清楚如何为version.go我尝试过的这个选项引用变量:
import "github.com/basbossink/psiw"
....
fmt.Println(psiw.VersionString)
Run Code Online (Sandbox Code Playgroud)
--
import "github.com/basbossink/psiw/main"
...
fmt.Println(main.VersionString)
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,编译器都会抱怨psiw和main分别未知。请注意,使用VersionStringin main将提供预期的结果。
我更喜欢一种解决方案,其中链接标志指向version程序包中的变量,因为它们不需要反向指针。但是任何建议都欢迎。
我喜欢Emacs org-mode但我有时希望在写一个特定的行或做出具体的改变时能说出来.
如果有一个自动版本控制机制可以跟踪所有更改(或增量),比如说每个小时和所有更改的时间戳,那就太棒了.
有什么建议?