gpt4 book ai didi

mercurial - 标签*实际上*是如何工作的?

转载 作者:行者123 更新时间:2023-12-03 01:15:40 27 4
gpt4 key购买 nike

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比其他的更老;我不知道为什么会出现故障。

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

mbayazit:~/test$ hg up stable
3 files updated, 0 files merged, 0 files removed, 0 files unresolved

它神奇地起作用了。如果该标签不在 .hgtags 中,这怎么可能?

最佳答案

官方标签第二节documentation写下这样的声明:

Updating a working dir to a particular tag will take that directory back to a point before the tag itself existed.

第一次.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 (导致创建 .hgtags 文件)修订 0d80b6ba4ba3b51a44f0f1d339fcac1d4b21f387修改后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 中创建。

关于mercurial - 标签*实际上*是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18340854/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com