2015-12-21 69 views
2

假設我在Mercurial中有50多個功能分支。如果我這樣做:Mercurial中的標籤如何自動傳播到所有分支?

hg tag some-tag 

在其中一個功能分支中,它似乎傳播到所有分支。無論我在哪個功能分支中,hg tags都將顯示所有標籤。這一切都很好。但是,如果我這樣做hg log,它會告訴我,含變化.hgtags的變更發生在一個特定的分支:

changeset: 4:ea48c727fbcd 
branch:  feat1 
tag:   tip 
user:  Daniel <[email protected]> 
date:  Mon Dec 21 20:15:11 2015 +0100 
files:  .hgtags 
description: 
Added tag feat-1.0 for changeset 3c81a17d4b31 

如何水銀保持.hgtags同步所有分支機構?我讀過Mercurial Tag Design,但沒有提到任何細節。

我問的原因是我們在工作時使用Mercurial的Rhodecode,並且這種傳播在重負載下似乎顯着落後

由於我可以看到.hgtags文件中的最新標籤,但hg tags未列出最新的標籤,所以此延遲真的很煩人。做另一個標籤有時可以解決這個問題(也許這是Rhodecode中的一個錯誤),但我想知道它是如何工作的,以便更好地理解底層機制。

+0

什麼版本的,你運行? Mercurial 3.4和3.5對標籤緩存有一些非常顯着的性能改進(3.3版有一個性能迴歸)。 –

+0

無視我之前的問題,我誤解了你的意思是「滯後」。如果'汞tags'缺少的東西是在你當前'.hgtags'(和標籤沒有別的分支或另一個版本刪除 - 這是怎麼了,你有時可以合法看到'.hgtags'標籤,但而不是'hg tags'),那就意味着有一個bug。僅供參考,Mercurial使用緩存來避免涉及相當昂貴的計算,並在新提交進行時更新;如果存在缺陷,它很可能是標籤緩存的問題。 –

回答

3

引述一些documentation

是在任何給定的時間效應的標籤是每頭指定的標記。如果相同的標籤在兩個不同的頭部中指定了兩個不同的修訂,則會出現一個困難的情況。對這個問題沒有一個「正確的」解決方案。

如果兩個定義/標籤的變化似乎無關......在「tipmost」(例如,一個具有較高版本數字)獲勝。
...
然而,如果標籤被兩個頭的一個共同的祖先定義的,但在短短的一個頭,則更改一個戰勝的不變之一。

另外:

如果只有一個頭只,其中標記出現是考慮到最後一行。如果有多個頭,標籤的前面的定義來確定哪些頭保存的最新標籤....如果一個標記指向0000000000000000000000000000000000000000它被認爲是刪除。

我的猜測是滯後是當多個分支中有多個標籤需要解決時,Mercurial必須查找每個變更集以確定其修訂以確定「最終」。只有變更集散列和標籤名稱在.hgtags中。

相關問題