最好让构建系统在您的发行档案和/或文件名称中插入当前版本标识符。
第一个问题是,你怎么获得这个版本标识符。基本上有三种方式:
- By letting the build server issue a
hg id
command to find out the build error.
- By having a
version
file which is populated by a changegroup
hook configured in your Mercurial repo configuration.
- By having a
version
file which is populated using the keyword extension. (Not recommended!)
第一种方法是直接从Mercurial直接提取信息信息,它几乎不需要为开发者设置任何设置。 其缺点在于它将建筑系统与特定版本控制系统紧密结合。
第二种方法与存储器系统保持独立,如果您从源归档中建立,或者如果您想要手动指定版本标签,则将继续使用。下边是它确实需要您设置钩子,然而,由于建筑机器通常是特别配置的中央服务器,这不应该是一个大问题。
我提到第三种办法是为了做到完整,但我认为大家一致认为,你确实希望避免这一机制。
最好采用1和2的混合方法,先尝试第2种方法,当找不到 < code> version 文件时,再回到第1种方法。为了更好地支持 < code> hg 归档 源导出,您还可以检查 < code>.hg_archival.txt 文件 。
第二个问题是,你对构建数字使用何种价值:
- The version identifier (from
hg id -i
).
- The local revision number (from
hg id -n
).
- An identifier using
latesttag
and latesttagdistance
, see Martin’s answer.
前者的优点在于它相当简单,并且独特地确定了所构建的准确版本。 虽然它不易为人读,也不能从散列中得出相对年龄。
第二个数字有一个递增数字, 但是这个数字只适用于建设机器的存储器, 所以您应该为开发者提供一个方法, 来循环这个数字, 以获得更改的 hash id, 否则它将毫无用处 。
我个人特别喜欢的第三种方法,它以人类可以读取的方式使用标记和距离提供时间信息,并另外指定精确修改的节点代号。虽然时间很长。