Mercurial中更新到标签创建前的提交时.hgtags的工作机制是什么?
Mercurial 标签解析规则
Mercurial 中hg tags返回的全局标签结果,核心读取逻辑如下:
- 读取范围不是当前工作目录的
.hgtags,而是仓库所有头提交(head commit,即没有子提交的提交记录,每个分支的最新提交都属于头提交)中包含的.hgtags文件,把所有头的.hgtags内容全部收集起来合并处理。 - 合并规则:
- 同一个标签存在多条记录时,以提交时间最晚的那条记录为准
- 如果某条标签记录对应的提交哈希是全零值
000000000000,代表该标签已被删除,不会出现在最终结果里 - 所有记录合并去重、按上述规则处理后,就是
hg tags返回的最终结果
现象解释
你切换到production标签指向的旧提交后,当前工作目录的.hgtags是该旧提交对应的历史版本,此时production标签的记录还没被写入到.hgtags里,所以grep查不到结果。但hg tags读取的是所有最新头提交的.hgtags,其中包含后续提交里写入的production标签记录,因此仍然能返回正确的标签指向。
如果需要查看当前提交对应的历史标签列表,可以执行hg tags --rev .,该命令只会读取当前修订版本及其祖先提交中的.hgtags文件,返回的结果和你当前工作目录.hgtags的内容一致。
内容的提问来源于stack exchange,提问作者mpen
相关产品推荐
相关产品推荐

