3

我想在使用hg tag XXX.

我已经在我的 hgrc 中设置了一个 pretag 钩子(注意:为了清楚起见,我已经删除了确保它输出到 hg root 中的 VERSION 的东西):

[hooks]
pretag.bump_version = (echo "$HG_TAG" > VERSION; hg commit -m "Updated VERSION to $HG_TAG" VERSION)

当我创建一个新标签时:

$ hg tag 1.1

我得到错误:

warning: ignoring unknown working parent <revision_id>!

我可以改用标签挂钩,它成功了,但是 VERSION 号恰好比标签晚一个修订:这意味着更新到标记的修订,然后构建将导致产品的版本号(这取决于 VERSION文件)将是不正确的。

有没有更好的方法来处理这个?我看过SO question #2558531,但每次都更新版本号:我只想在标记存储库之前更新版本号。

4

1 回答 1

3

切换到 apre-tag而不是pretaghook。钩子pretag是一个特殊的钩子,它知道你正在标记。相比之下,pre-tag钩子是一个通用pre-*钩子,它在标记命令启动之前运行并且完全不知道它正在标记——这意味着它也更早地运行。(所有东西都有 pre-* 钩子,比如说,pre-log)。

我让你的例子像这样工作:

[hooks]
pre-tag.bump_version = echo $HG_ARGS > VERSION; hg commit -m "updated version to $HG_ARGS" VERSION

仅使用如下所示的命令行:

ry4an@ry4an:~$ hg init tagtest
ry4an@ry4an:~$ cd tagtest
ry4an@ry4an:~/tagtest$ echo text > VERSION
ry4an@ry4an:~/tagtest$ hg commit -A -m initial
adding file
ry4an@ry4an:~/tagtest$ hg tag --config hooks.pre-tag='echo $HG_ARGS > VERSION; hg commit -m "updated version to $HG_ARGS" VERSION' 1.1

请注意,我必须将参数切换为,$HG_ARGS因为它是一个pre-*不知道我们正在标记的命令。详细信息在hgrc手册页中。

另请注意,VERSION当我通过明确命名挂钩时,我只提交文件。您不希望仅仅因为您标记了而意外地提交了一堆您从先前提交中排除的调试内容。

于 2012-04-12T13:39:27.813 回答