version-control - 用 Mercurial 替换关键字

标签 version-control mercurial

我对带有关键字扩展扩展名的 Mercurial 有一个问题:是否可以使用关键字扩展实际提交消息,以便它出现在源中以供快速引用源中的内容?

编辑:这似乎有效:

在 repo 的 hgrc

Log={desc}

但它不会堆叠,正如据称 CVS 对应的那样。

使用来源,卢克:

跨越多条线的扩展和增量扩展,
像 CVS 的 $Log$ 一样,不被支持。关键字模板映射“Log =
{desc}"扩展到变更集描述的第一行。

最佳答案

关键字只能在一行上展开,因此您无法在 log messages keep accumulating 处获得类似 CVS 的行为。 .这记录在 hg help keyword 中启用扩展后。

提交消息可以通过 {desc} template keyword 访问在 Mercurial 中,因此您可以添加

[keywordmaps]
Log = {desc}

[keyword]
**.c =

$Log$扩展线共此.c文件。

请注意,关键字扩展以基于每个文件的操作方式提供了类似于 CVS 的世界 View 。 Mercurial 通常在存储库范围的基础上工作。如果你这样做
$ hg commit -m "Fixed bug 123" foo.c    # create changeset 10:84e0d0dc9ce5
$ hg commit -m "Fixed bug 234" bar.c    # create changeset 11:2e85d7f2f93e

那么 foo.c 是正确的最后在修订版 10 中更改,但说修订版 11 仅包含 bar.c 是错误的. foo.c文件也是修订版 11 的一部分——对 bar.c 的更改是完全合理的。取决于之前对 foo.c 的更改因此修订版 11 中的快照捕获了 foo.c 的状态和 bar.c .

keyword extension当它扩展关键字时,在每个文件的基础上工作:它会写 $Log: Fixed bug 123 $进入 foo.c$Log: Fixed bug 234 $进入 bar.c每当您更新到变更集 2e85d7f2f93e 时。

如果您想了解上次触摸每个文件的原因和时间,那么这将执行您想要的操作。如果您想知道存储库的全局状态 - 例如将其用作版本字符串! ——那就错了。问题是你的 version.h文件在开发过程中会长期保持不变,因此该文件中的关键字也将保持不变。

在这种情况下,你真的应该运行 hg id作为您的 Makefile 的一部分.您可以使用以下内容使其更花哨:
$ hg parents --template '{latesttag}+{latesttagdistance}-{node|short}\n'

它将输出一个字符串,如 2.1+117-eed1e5bba9a8 .这意味着您当前的版本 (eed1e5bba9a8) 在最后一个标签 (2.1) 之后是 117 次提交。这使用户可以轻松比较从同一中央存储库制作的构建,并且如果需要,您仍然可以独特地重现构建。

关于version-control - 用 Mercurial 替换关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4752621/

相关文章:

xcode - 如何使用远程 Git 存储库设置 Xcode

git - Mercurial 中的分支是否和 Git 一样好用?

mercurial - 在两台服务器上共享一个 Mercurial 存储库

git - 如何在 .gitignore 中获得等效于 .hgignore 的正则表达式 ^var/(?!\log|.dummy) 和 ^var/log/(?!\.dummy) ?

version-control - 小型实验室的版本控制系统?

svn - 'svn info'中的这两个修订版本号是什么?

version-control - 额外的 "push -f"/仅备份 Mercurial 存储库是否有效?

git - 如何让 travis-ci 使用本地 git 分支而不是特定的提交?

git - 为每个存储库的 Git 指定 SSH 配置

mercurial - 如何从化石迁移到 Mercurial