Mercurial - 应该合并 .hgtags 文件吗?

12
如果你要将仓库B中的更改合并到仓库A中,是否应该合并 .hgtags 文件?
仓库B可能有标签1.01、1.02、1.03,而这些标签不在仓库A中。为什么要将它们合并到仓库A的 .hgtags 文件中呢?如果我们合并了这些标签,并尝试通过查看标签1.01来查看仓库A,我认为这样是行不通的。

2
我认为大家的理解是,在打标签时只应该在你要打标签的版本之前打标签,这样就不可能合并一个 .hgtags 文件,该文件引用了合并没有带来的变更集。 - Lasse V. Karlsen
2个回答

13
简短回答:这样做是有效的,您应该合并.hgtags
为什么您实际上应该合并.hgtags,并且为什么这样做很有意义?
所以你有:
  • 更改集3(a1)、4(a2)、5(a3)的Repo A
  • 更改集3(b1)、4(b2)、5(b3)标记1.01的Repo B
以上列出了更改集编号(长唯一十六进制 ID)标记。
因此,您将Repo B合并到Repo A中,得到类似于以下内容的东西。
      9 (a4) merge 
     /   \
    |   8 (b3) tag 1.01
    |    |
    |   7 (b2)
    |    |
    |   6 (b1)
 5 (a3)  |
    |    |
 4 (a2)  |
    |    |
 3 (a1)  |
     \   /
     2 (a0) 

如果您将 repo 更新到标签1.01,则会得到在那个时间点上代码在 Repo B 中 的准确副本,就像 Mercurial 所承诺的一样。

您应该将它们合并,因为从 Repo B 中打过标签的变更集现在已成为 Repo A 中变更集树的一部分,因此,在 Repo B 中打的标签现在也已在 Repo A 中打上了标签。 不合并它们只会导致您失去为变更集创建的标签。


假设在变更集a1中我们添加了一个文件。现在如果您将存储库更新到1.01,那么其中是否包括在a1中添加的新文件?我本以为它会包括那个文件...这不是我们想要的结果。 - Marcus Leon
@Marcus 1.01在合并之下,因为它们在不同的分支中,所以不会被包括进去。 - msarchet
我指的是合并后的情况。当你合并A和B时,我们会合并.hgtags文件,以便包含1.01标签。 - Marcus Leon
1
@Marcus,如果你合并并且正在使用合并之上的变更集,则所有代码都在那里。但是,通过移动到标记的变更集下方,您正在更改代码以使其看起来像创建标记时的样子。这有意义吗? - msarchet

13

有趣的事情(来自mercurial wiki

'effective' 标签取自所有分支头部的 .hgtags 文件。最接近 tip 的标签优先。

因此,当您合并(组合两个头)时,您需要合并 .hgtags,否则某些标签将消失。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接