3

ドキュメントには、すべてのタグが に保存されていると書かれていますが.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ですか?

4

2 に答える 2

5

公式のタグドキュメントの 2 番目のセクションに、次のステートメントが書かれています。

作業ディレクトリを特定のタグに更新すると、そのディレクトリはタグ自体が存在する前の時点に戻ります。

特定のリビジョンにタグを付けると、初めて.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

ここでは、リポジトリの状態を 2 番目のタグに更新した後、.hgtagsファイルは消えませんでしたが、リポジトリの状態は 2 番目のタグがファイルに追加される直前であるため、最初のタグだけが存在することがわかり.hgtagsます。

アップデート:

あなたの場合、リビジョンが作成された後( stable.hgtagsファイルの作成を引き起こした)最初のタグをリビジョンに追加したようです(でタグ付けした)。そのため、リポジトリの状態をリビジョンに更新すると、まだ作成されていないため、ファイルはありません。0d80b6ba4ba3b51a44f0f1d339fcac1d4b21f387c70d8e7e516d8b9e0c520063a575b4acea1b2f94testtagtesttag.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 のみです。

于 2013-08-20T20:01:14.933 に答える
4

The available tags are the union of all the .hgtags in all the heads of your repo. So to see everything you'd need to see what .hgtags looks like in every revision that shows up in hg heads. @black_wizard has a great explanation of why you don't see your tag in .hgtags when you update to them, and "the .hgtags file is read from the hg heads" is why they still work.

于 2013-08-20T22:05:56.253 に答える