The docs说所有标签都存储在.hgtags
中,但这里显然有一些黑魔法。
我的代码如下:
mbayazit:~/test$ cat .hgtags
0d80b6ba4ba3b51a44f0f1d339fcac1d4b21f387 stable
c70d8e7e516d8b9e0c520063a575b4acea1b2f94 testtag
0d80b6ba4ba3b51a44f0f1d339fcac1d4b21f387 stable
b1a360af6daf536ddc55b6b50127e88c30a227dc stable
如果我更新为testtag
,
mbayazit:~/test$ hg up testtag
1 files updated, 0 files merged, 2 files removed, 0 files unresolved
标签消失,
mbayazit:~/test$ cat .hgtags
cat: .hgtags: No such file or directory
因为testtag
比其他人年长;为什么它不按顺序我不知道。
但是当我尝试再次更新为stable
时,
mbayazit:~/test$ hg up stable
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
它神奇地起作用。如果该标记在.hgtags
中不均匀,那怎么可能?
答案 0 :(得分:5)
在官方标签documentation的第二部分写下这句话:
将工作目录更新为特定标记将采用该目录 回到之前标记本身存在。
首次标记特定修订时,会创建.hgtags
文件。
当您将存储库状态更新为此标记的修订时,存储库的状态实际上正好在.hgtags
添加到版本控制之前。
以下是添加第一个标记然后将存储库状态更新为此标记修订版本的示例:
PS D:\tagstest> hg init
PS D:\tagstest [default tip]> echo 'Something' > readme.txt
PS D:\tagstest [default ?1 tip]> hg addremove
adding readme.txt
PS D:\tagstest [default +1 tip]> hg ci -m "First commit"
PS D:\tagstest [default tip]> hg tag first
PS D:\tagstest [default tip]> cat .\.hgtags
9494cb0dc308d91ecae8514a341c2fa2324d3ade first
PS D:\tagstest [default tip]> hg update first
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
PS D:\tagstest [default first]> cat .\.hgtags
cat : Cannot find path 'D:\tagstest\.hgtags' because it does not exist.
这个案例就是您在问题中描述的内容。但是,让我们进一步添加另一个标签:
PS D:\tagstest [default first]> hg up tip
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
PS D:\tagstest [default tip]> echo 'Something else' >> .\readme.txt
PS D:\tagstest [default ~1 tip]> hg ci -m "second commit"
PS D:\tagstest [default tip]> hg tag second
PS D:\tagstest [default tip]> cat .\.hgtags
9494cb0dc308d91ecae8514a341c2fa2324d3ade first
8b0455fffb17c978ef9e285905d76e34feae32f4 second
PS D:\tagstest [default tip]> hg up second
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
PS D:\tagstest [default second]> cat .\.hgtags
9494cb0dc308d91ecae8514a341c2fa2324d3ade first
在这里你可以看到,在将存储库状态更新为第二个标记.hgtags
后,文件没有消失,但是只有第一个标记,因为存储库的状态就在第二个标记添加到.hgtags
文件之前
<强>更新强>
在您创建修订版stable
之后,您看起来已将第一个标记0d80b6ba4ba3b51a44f0f1d339fcac1d4b21f387
(导致创建.hgtags文件)添加到修订版c70d8e7e516d8b9e0c520063a575b4acea1b2f94
(您标记为与testtag
)。因此,当您将存储库状态更新为testtag
版本时,没有.hgtags
文件,因为它尚未创建。
示例:
PS D:\tagstest2> hg init
PS D:\tagstest2 [default tip]> echo "Something" > readme.txt
PS D:\tagstest2 [default ?1 tip]> hg addremove
adding readme.txt
PS D:\tagstest2 [default +1 tip]> hg ci -m "First commit"
PS D:\tagstest2 [default tip]> echo "Something else" > .\readme.txt
PS D:\tagstest2 [default ~1 tip]> hg ci -m "Second commit"
PS D:\tagstest2 [default tip]> echo "Something more" >> .\readme.txt
PS D:\tagstest2 [default ~1 tip]> hg ci -m "Third commit"
PS D:\tagstest2 [default tip]> hg tag -r 0 first
PS D:\tagstest2 [default tip]> hg tag -r 1 second
PS D:\tagstest2 [default tip]> hg gl
@ 4[tip] a0753742f012 2013-08-21 00:29 +0400 peshkovroman
| Added tag second for changeset 7e4896c8ef3e
|
o 3 cee5760a9d1c 2013-08-21 00:29 +0400 peshkovroman
| Added tag first for changeset 12f055c90ee8
|
o 2 f4c00a7394e1 2013-08-21 00:29 +0400 peshkovroman
| Third commit
|
o 1[second] 7e4896c8ef3e 2013-08-21 00:28 +0400 peshkovroman
| Second commit
|
o 0[first] 12f055c90ee8 2013-08-21 00:28 +0400 peshkovroman
当您致电hg up second
时,您的存储库状态将更新为修订版1,但.hgtags
仅在修订版2中创建。
答案 1 :(得分:4)
可用标签是您回购的所有头部中所有.hgtags的并集。因此,要查看.hgtags
中显示的每个修订版中hg heads
所见的所有内容。 @black_wizard很好地解释了为什么当你更新它们时{1}}中没有看到你的标记,并且“从.hgtags
读取.hgtags
文件”这就是为什么它们仍然存在的原因工作。