目前在我的实践中我使用VERSION文件存储:
major=2 minor=0 fix=1
表示产品版本v2.0.1或更新版本的来源。
在每次发布之前,我必须提交对此文件的更新,因此标记为 tag2.0.1 或 release-2.0.1 的标记覆盖上面的内容(而不是以前的版本!)
我认为可以通过从构建脚本自动生成VERSION文件来避免此作业。
了解转历史:
+--+-----+----------------------+-YY--+----+------+------+-HH--> dev| | ^ ^ | | | | | | | | | | | v v v | | | | | | +--+------+-ZZ---+--> | | | | | | b2 | | | | | | | | | v v v | | | | | | t2.0.0 t2.0.1 t2.1.0 v v | | v v t0.1.0 +---+--XX--+-+---+-+-----+------+------+------+------+---> b1 | | | | | | | | v v v v v v v v t1.0.0 t1.0.1 t1.0.2 t1.1.0 t1.2.0 t1.2.1 t1.2.2 t1.2.3
点 XX 版本 1.0.0 ,点 YY 版本 1.0.2 ,at点 ZZ 版本 2.0.1 。
对于点 HH 是不知道如何设置版本。我认为它必须是 1.0.2 ,因为我们没有将 dev 分支与发布分支 b2 合并。
我看了:
$ hg help revsets
但是看不出如何找到给定修订版的最近标签。有了Git和Bzr,我的经验不足......
如果这不可能,我会寻找争论。另外,我想听听如果可能的话,如何避免手动维护VERSION文件(或者为什么不可能这样做。)
PS。 VERSION文件需要维护程序包相关性并在用户反馈中识别产品源状态。
PSS。 与给定修订术语最接近的标记可能看起来模糊,但每个开发人员都可以说出它的工作版本。为什么这不能做机器?
答案 0 :(得分:5)
您可以使用以下内容:
hg log --template "{latesttag}-{latesttagdistance}-{node|short}\n" --rev <REV>
返回如下字符串:
2.1.4-2-12eeab7a8073
这告诉我们:
了解更多信息,请阅读templates。
Git
具有内置describe
命令,可提供相同的信息。但是,您必须了解默认情况下它仅适用于带注释的标记(有关详细信息,请参见手册页)。
答案 1 :(得分:3)
bzr tags --sort=time | tail -n1 | cut -d ' ' -f1
改编自dOxxx的答案。我看到标签通常按名称排序,但可以按时间对参数进行排序。
您甚至可以使用extcommand插件创建外部bzr别名。
bzr branch http://bzr.oxygene.sk/bzr-plugins/extcommand/ ~/.bazaar/plugins
然后,您可以将以下内容添加到~/.bazaar/bazaar.conf
[EXTERNAL_ALIASES]
last-tag = bzr tags --sort=time | tail -n1 | cut -d ' ' -f1
然后你可以这样做:
$bzr last-tag
v0.9.0-SNAPSHOT
答案 2 :(得分:2)
你看过git describe
git了吗?它将显示可以从提交中访问的最新标记。
答案 3 :(得分:2)
Git有一个专门为此设计的命令:git-describe
。具体如何使用它取决于您的需求,但一般来说,git describe [opts] <commit>
生成<tag>-<n-commits>-<short-hash>
形式的东西,告诉您最新的标记,自那时以来已经提交了多少次提交,以及缩写的哈希提交。例如,它可以为您提供v1.7.8-rc0-32-g87bf9a7
。
相关选项:
--tags
- 包含所有标记,而不仅仅是带注释的标记。你可能想要这个。--match <pattern>
- 仅包含与给定模式匹配的标记,因此您可以将自己限制为版本标记,而不是任何无关的标记。--abrev=<n>
- 使用哈希的n
位数(设置为0来抑制它)还有其他几个 - 请参阅联机帮助页。
关于您的VERSION文件:您通常不应该跟踪它。必须对其进行修改是弄巧成拙的;提交包含文件,因此当您修改并提交时,(略微)更改版本。相反,您可以在构建/部署过程中自动生成它,并将其包含在源分发中。你可以在Git的源代码中找到一个很好的例子 - 有一个名为GIT-VERSION-GEN的脚本,它由Makefile调用,实际上是一个围绕git-describe的轻量级包装器。它会创建一个版本文件,然后将其打包到源代码压缩包中,其内容将由构建过程的其余部分用于在编译期间烘焙版本号。
答案 4 :(得分:1)
bzr tags
列出当前分支中的标记(及其相应的修订版)。我相信最新的标签首先列出,所以你可能会做这样的事情:
bzr tags | head -n1 | cut -d ' ' -f1