2012-01-02 50 views
6

我們使用hg來控制大型項目的來源。每當我們做一個發佈,我們用hg標記版本。Hg - 查找「覆蓋」特定文件版本的標籤

現在說我採取了具體的修訂(例如,我已經修復了一個錯誤)。我想知道哪些版本包含此修訂,即哪些標籤「覆蓋」此修訂。

我該如何找到它? hg標記似乎只涉及標記的變更集。我記得在ClearCase中,標記修訂的每個祖先都會被標記,有沒有辦法在hg中看到這些信息?

謝謝!

+0

懶惰獾一針見血的頭,我調整了自己的模板「{節點} - {tags} \ n「這使我能夠快速查看包含給定變更集的所有版本。輝煌! – YMA 2012-01-04 08:59:15

回答

5

沒有任何附加擴展的版本可以給你一些東西。像

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 2012-01-03 10:17:34

+0

@YMA - 不,作爲**我**閱讀您的文本,你必須使用顛倒順序 - 找到標籤**後一些revset ** - 「......哪些版本包含此修復...」 – 2012-01-03 22:33:57

+0

我的錯誤。事實上,這會給我所有我需要的標籤。非常感謝! – YMA 2012-01-04 08:51:13

0

您可以使用Nearest extension來查找您的修訂版本的最近前鋒標籤。然後,根據您的工作流程,您應該能夠輕鬆推斷哪個其他標籤也包含您的更改。

您也可以使用以下方法來從當前版本打印最新的落後標籤:

然後還要演繹「覆蓋」的標籤。

+1

{latesttag}在* changeset之前顯示tag *,OP **在「all after」**之後提示。失敗 – 2012-01-02 19:52:29

+0

@LazyBadger是的,這就是我在我的回答中所說的......一旦你在最後一個標籤之前(或者向後重新使用我的詞),你可以推斷出其他標籤。 – krtek 2012-01-02 22:03:54

+0

好主意,但標籤不一定是線性的 - 我們的變更圖看起來更像是一個掛毯而不是梯子:) – YMA 2012-01-03 09:47:12

1

這提供了一種類似於hg tags輸出:

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