如何在Git/HG/Bzr中找到当前版本的最新标签?

gav*_*koa 3 git version-control mercurial branch bazaar

目前在我的实践中我使用VERSION文件来存储:

major=2
minor=0
fix=1

这意味着产品版本v2.0.1或更新版本的来源.

在每次发布之前,我必须提交对此文件的更新,因此标记为tag2.0.1release-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,在点ZZ版本是2.0.1.

对于点HH是不知道如何设置版本.我认为它必须是1.0.2,因为我们没有将dev分支与发布分支b2合并.

我读:

  $ hg help revsets

但是看不出如何找到最近的标签给定的修订版.有了Git和Bzr,我的经验不足......

或者,如果这不可能,我会寻找争论.另外,我喜欢听听如果可能的话,如何避免手动维护VERSION文件(或者说为什么这是不可能的参数).

PS.VERSION文件需要维护包依赖性并在用户反馈中识别产品源状态.

PSS. 给定修订术语的最近标记可能看起来模糊,但每个开发人员都可以说出它的工作版本.为什么这不能做机器?

Tim*_*gan 5

你可以使用这样的东西:

hg log --template "{latesttag}-{latesttagdistance}-{node|short}\n" --rev <REV>
Run Code Online (Sandbox Code Playgroud)

返回一个字符串,如:

2.1.4-2-12eeab7a8073

这告诉我们:

  • 此提交之前的最新标记是2.1.4
  • 当前版本是超过该标记的2次提交
  • 变更集ID为12eeab7a8073

阅读模板以获取更多信息.

Git有一个describe提供相同信息的内置命令.但是,您必须了解默认情况下它仅适用于带注释的标记(有关详细信息,请参见手册页).