2012-01-02 10 views
6

hgを使用して、大きなプロジェクトのソースを制御します。リリースを行うたびに、バージョンをhgでタグ付けします。Hg - 特定のファイルバージョンをカバーするタグを見つける

ここで、特定のリビジョン(たとえば、バグを修正した)を取ります。どのリリースにこの修正が含まれているか、つまりこのリビジョンを「カバーする」タグを知りたい。

どうすればこのファイルが見つかりますか? hgタグでは、タグ付きチェンジセットのみを参照するように見えます。 ClearCaseではタグ付きリビジョンのすべての祖先もマークされていることを覚えていますが、この情報をhgで見る方法はありますか?

ありがとうございます!

+0

怠惰なアナグマが頭の上に釘を打つ、私は「{ノード}に彼のテンプレートを微調整 - {tags} \ n "これは、与えられたチェンジセットを含むすべてのバージョンをすばやく見ることができます。ブリリアント! – YMA

答えて

5

追加の拡張子を持たないRevsetsは何かを与えることができます。以下のような問題の

hg log -r "id(hash):tip and tag()"または短く、よりよい(多分)バージョンhg log -r "descendants(hash) and tag()"

だけと改正後のマージと私のレポから短縮revsetの例

>hg glog -r "descendants(c9e3b41ec78f)" 
@ changeset: 65:f202d72d6397 
| tag:   tip 
| parent:  63:c778bae76563 
| user:  Alex Bream 
| date:  Wed Nov 09 21:42:50 2011 +0600 
| summary:  2-9 яюыэюёЄ№■ фю 2769 
| 
| o changeset: 64:625d08492555 
| | branch:  Cleanup 
| | parent:  62:eed6619dadb8 
| | user:  Alex Bream 
| | date:  Wed Nov 09 21:38:44 2011 +0600 
| | summary:  ╟рўшёЄър яю 1-1 155 
| | 
o | changeset: 63:c778bae76563 
|\| parent:  61:e7ae9e5f725a 
| | parent:  62:eed6619dadb8 
| | user:  Alex Bream 
| | date:  Wed Nov 09 21:33:22 2011 +0600 
| | summary:  Merge with Cleanup 
| | 
| o changeset: 62:eed6619dadb8 
| | branch:  Cleanup 
| | parent:  59:c9e3b41ec78f 
| | user:  Alex Bream 
| | date:  Thu Mar 03 19:19:34 2011 +0500 
| | summary:  ╟рўшёЄър яю 1-1 131 
| | 
o | changeset: 61:e7ae9e5f725a 
| | user:  Alex Bream 
| | date:  Thu Mar 03 05:40:34 2011 +0500 
| | summary:  2-9 яю 2745 
| | 
o | changeset: 60:1393fe759096 
|\| parent:  57:a38258cac9b8 
| | parent:  59:c9e3b41ec78f 
| | user:  Alexander 
| | date:  Thu Mar 03 04:59:22 2011 +0500 
| | summary:  Merge ё ўшёЄшыъющ 
| | 
| o changeset: 59:c9e3b41ec78f 
| | branch:  Cleanup 
| | user:  Alexander 
| | date:  Thu Mar 03 04:54:11 2011 +0500 
| | summary:  ╟рўшёЄър яЁюыюу яюыэюёЄ№■ 
| | 

そしてrevsetsの二つの形式の出力を比較します(とにかく同じ出力)

子孫()

>hg log -r "descendants(c9e3b41ec78f)" --template "{rev}:{node|short}\n" 
59:c9e3b41ec78f 
60:1393fe759096 
61:e7ae9e5f725a 
62:eed6619dadb8 
63:c778bae76563 
64:625d08492555 
65:f202d72d6397 

直接範囲定義

>hg log -r "id(c9e3b41ec78f):tip" --template "{rev}:{node|short}\n" 
59:c9e3b41ec78f 
60:1393fe759096 
61:e7ae9e5f725a 
62:eed6619dadb8 
63:c778bae76563 
64:625d08492555 
65:f202d72d6397 
+0

これはうまくいくと思いますが、私が集めたものから、それぞれのタグを取って、あなたのチェンジセットがそこにあるかどうか確認してください。 – YMA

+0

@YMA - いいえ、** **あなたのテキストを読んでください。あなたは逆順を使わなければなりません - タグを見つけてください** - いくつかのリボセットの後** - "リリースにはこの修正が含まれています..." –

+0

私の間違い。確かに、これは私に必要なすべてのタグを与えるだろう。どうもありがとう! – YMA

0

Nearest extensionを使用して、リビジョンに最も近い転送タグを見つけることができます。次に、ワークフローによっては、変更を含む他のタグを簡単に推測できるはずです。

をその後も「カバー」タグを推測:

はまた、現在のリビジョンから最新の後方にタグを印刷するには、次のことができます。

+1

{latesttag}は* changesetの前にタグ*を表示し、OP **は "all after" **を求めました。 FAIL –

+0

@LazyBadgerええ、それは私の答えで言いました...一度最後のタグがある(または私の単語を再利用するために後方に)、あなたは他のものを推論することができます。 – krtek

+0

良いアイデアですが、タグは必ずしも直線的ではありません - 私たちのチェンジセットグラフは、はしごよりもタペストリーのように見えます:) – YMA

1

これはhg tagsのような出力が得られます。

hg log -r "reverse(descendants(8bb6)) and tag()" --template "{tags}\t{rev}:{node|short}\n" 
関連する問題