首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >标签实际上是如何工作的?

标签实际上是如何工作的?
EN

Stack Overflow用户
提问于 2013-08-20 16:58:52
回答 2查看 245关注 0票数 3

医生们说所有的标签都存储在.hgtags中,但是这里显然有一些黑魔法。

我的标签是这样的:

代码语言:javascript
复制
mbayazit:~/test$ cat .hgtags 
0d80b6ba4ba3b51a44f0f1d339fcac1d4b21f387 stable
c70d8e7e516d8b9e0c520063a575b4acea1b2f94 testtag
0d80b6ba4ba3b51a44f0f1d339fcac1d4b21f387 stable
b1a360af6daf536ddc55b6b50127e88c30a227dc stable

如果我更新到testtag

代码语言:javascript
复制
mbayazit:~/test$ hg up testtag
1 files updated, 0 files merged, 2 files removed, 0 files unresolved

标签消失了,

代码语言:javascript
复制
mbayazit:~/test$ cat .hgtags 
cat: .hgtags: No such file or directory

因为testtag比其他的老,我不知道它为什么会出问题。

但是当我再次尝试更新到stable时,

代码语言:javascript
复制
mbayazit:~/test$ hg up stable
3 files updated, 0 files merged, 0 files removed, 0 files unresolved

神奇地起作用了。如果这个标签不在.hgtags里,那怎么可能?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-20 22:05:56

可用的标签是所有.hgtags在您的回购的所有头部的联合。因此,要查看.hgtagshg heads中出现的每个修订版中的样子,您需要看到的所有内容。@black_wizard很好地解释了为什么在更新到它们时没有在.hgtags中看到标记,而“.hgtags文件是从hg heads读取的”是它们仍然工作的原因。

票数 4
EN

Stack Overflow用户

发布于 2013-08-20 20:01:14

在官方标签的第二部分,文档写了这样的声明:

将一个工作的dir更新到特定的标记将使该目录返回到之前的一个点,然后标记本身就存在了。

第一次在标记特定版本时创建.hgtags文件。当您将存储库状态更新到此标记的修订时,存储库的状态实际上就在将.hgtags添加到版本控制之前。

当我们添加第一个标记,然后将存储库状态更新到这个带标记的修订版时,下面是一个示例:

代码语言:javascript
复制
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.

这个案子正是你在问题中所描述的。但是让我们更进一步,添加另一个标记:

代码语言:javascript
复制
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 (使用testtag标记)之后,将第一个标记c70d8e7e516d8b9e0c520063a575b4acea1b2f94 (这导致了创建.hgtags文件)添加到了修订0d80b6ba4ba3b51a44f0f1d339fcac1d4b21f387中。因此,当您将存储库状态更新为testtag修订时,没有.hgtags文件,因为它尚未创建。

示例:

代码语言:javascript
复制
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版中创建。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18340854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档