基于Mercurial Commits的单调增加版本号

Isa*_*aac 14 versioning mercurial

当我使用subversion作为应用程序的代码时,我可以将一个句点和结果附加svnversion到版本号以创建一个唯一且单调递增的版本号,并且还可以保证任何签出的相同修订版本代码将生成相同的版本号.

在Mercurial中,由于修订号在克隆之间不一定一致,因此本地修订号不适用.散列是适当唯一且一致的,但不会创建单调增加的数字.如何根据Mercurial存储库提交生成适当的数字以附加到版本号?

编辑: 我有一个具有自动更新检查的应用程序,该应用程序依赖于版本号,该版本号是一系列以句点分隔的整数,以确定版本是否更新.在发布之间的时间里,我有一些用户在尝试测试版本.通常,这些构建解决了测试人员遇到的问题,因此测试人员停止使用已发布的版本并切换到测试版本.我在将额外组件添加到版本号时的最初目标是:

  • 确保在发布时,使用测试版本的用户也会自动显示更新
  • 能够轻松判断测试人员是否正在使用最新的测试版本

例如,0.5.0版本的版本号为0.5.0.410; 在0.5.1发布之前,有版本号为0.5.1.411,0.5.1.420和0.5.1.421的测试版本; 然后,0.5.1版本的版本号为0.5.1.423.

Nic*_*int 6

正如@Matthew所说,你不能指望克隆版本号之间的任何比较都没有任何价值.但是,如果您将应用程序基于单个存储库并始终从任何克隆返回到该中央存储库,那么只要您坚持使用单个分支,就可以依赖该单个中央版本号.

基本上,如果您以模仿Subversion的方式使用Mercurial,即使用单个中央存储库,则可以使用版本号作为应用程序构建的标记.

希望这可以帮助.

  • 您仍然可以使用Mercurial的所有功能,但您只需使其适用于适合您需求的工作流程.在您的情况下,您基本上希望您的克隆*了解*关于在其他克隆上构建的版本.使用中央存储库进行"官方"发布似乎是一种合理的前进方式. (2认同)

Igo*_*ejc 5

这就是Fog Creek使用Mercurial进行构建版本控制的方法+其他一些建议:http://kiln.stackexchange.com/questions/2194/best-practice-generating-build-numbers


Isa*_*aac 4

仍然需要一些东西来尝试维护各种开发版本的排序和匹配,我首先尝试使用上次提交的 unix 时间戳:

REV=$(hg tip --template '{date|hgdate}' | cut -f1 -d' ')
Run Code Online (Sandbox Code Playgroud)

然而,这个数字太长了(10 位数字)。(当然,并不能保证它是唯一的,但是在我是唯一开发人员的项目中,同一秒内两次提交的概率基本上为 0;事实上,在 1 分钟内两次提交的概率彼此本质上都是0。)

由于“基本”版本号(附加此修订号的部分)仅在标记版本后立即更改,因此我最终使用的是提示与最新标记祖先之间的分钟数:

HG_LAST_TAG_TIMESTAMP=$(hg log -r "$(hg log -r '.' --template '{latesttag}')" --template "{date|hgdate}\n" | cut -f1 -d' ')
HG_TIP_TIMESTAMP=$(hg log -r '.' --template "{date|hgdate}\n" | cut -f1 -d' ')
REV=$(( ($HG_TIP_TIMESTAMP - $HG_LAST_TAG_TIMESTAMP) / 60 ))
Run Code Online (Sandbox Code Playgroud)

编辑:使用tip是一个错误,因为它指的是对任何分支的最新提交;使用log -r '.'指的是工作副本所基于的修订。)