“预提交”脚本仅在提交时触发。当用户推送到他们已经提交的“中央”服务器时,预提交钩子做任何事情都为时已晚。当开发人员推送时,您可以触发在“中央”服务器上运行changegroup
的incoming
钩子,但这些不能修改提交——提交已经提交/烘焙/完成,他们只能对它们做出反应.
作为一个建议,实际上不要将版本字符串放入文件中——每次提交都会更改一个文件,这只会让合并变得很痛苦。而是执行以下一项或多项操作:
- 有一个 CI 服务器(如 Jenkins)在每次推送时构建并使用 Jenkins 构建号,它可以传递到您的构建脚本中
- 使用 Mercurial nodeid (hash) 作为版本字符串的一部分,这样您就可以始终准确地知道构建中的修订版本——并且不要将它放在文件中,只需在构建(或部署)脚本中查询它
- 使用
changegroup
钩子自动标记推送,它为提交应用一个漂亮的(可能是连续的)名称(注意,这几乎使你的提交数量翻了一番,因为每个标签都是一个提交)
就个人而言,我在构建脚本中使用了类似的东西:
build.sh --version_string=$(hg log -r . --template '{latesttag}.{latesttagdistance}-{node|short}')
这让我得到了看起来像“ 1.0.3-5fd8ed67272e
”的版本字符串,可以粗略地解读为“从变更集三个提交构建,因为版本 1.0 被标记为 nodeid 5fd8ed67272e”,这非常好——而且它从来没有保存到文件中VERSION
当我的部署脚本将其上传到服务器时,编译(用于编译语言)或写入文件。