2017-05-29 73 views
0

我有一個Mercurial倉庫,它有幾個標籤。這些標籤用於發佈管理,並且都包含版本號。所有標籤始終添加在默認分支上。下面是我的.hgtags文件的摘錄:爲什麼我的Mercurial標籤不出現在標籤列表中?

55d0e566170f61935088c301ced8137b17868171 1.63 
d898fc03cefa0becb880e0ad214d80aec22b79df 1.64 
dfef02cc4a2f8e34ba9e34c782299708d8ec68b7 1.65 
f0519f072992c39346b65332e444492fc5694e14 1.66 
6537785f8093c0f3b55df0e41bb5586aa104bd9f 1.66.1 

出於某種原因,1.66標籤不TortoiseHg顯示出來,並既不hg tags。我可以使它通過經TortoiseHg它創建的文件中的額外的兩行重新加入顯示:

0000000000000000000000000000000000000000 1.66 
f0519f072992c39346b65332e444492fc5694e14 1.66 

正如你可以看到,新創建的標籤的哈希還是他一樣的一舊標籤。

爲什麼現有標籤不顯示?清除.hg/cache目錄沒有幫助。

+0

您的.hgtags文件中是否有另一行刪除標記,即「0000000000000000000000000000000000000000 1.66」? – planetmaker

+0

@planetmaker不,這是1.66的唯一行 – Chris

+0

Mercurial使用來自所有分支頭的.hgtags文件,所以也許標籤在另一個頭中被刪除? –

回答

0

事實證明,相同的標籤名稱曾被(錯誤地)用於此存儲庫上的本地標籤,但隨後被刪除。因此,有一條線刪除了.hg/localtags中的標籤。看起來這也覆蓋了非本地標籤。從localtags文件中刪除違規行解決了問題。

0

當您將更新爲特定標籤時,標籤本身消失。這是Mercurial 存儲標籤的方式的自然結果,該標籤位於版本控制的文件中。見the wiki額外的例子,但在短:

hg up -r 1.66 

,會進入被標記1.66的修訂,其本身所具有的.hgtags文件,做有它1.66項,因爲修改你剛剛更新到創建之前名稱1.66本身進入.hgtags。據推測,這是發生在這裏的事情。 (編輯每條評論:顯然不是,我假設因爲你顯示文件中的行,你主要看文件,現在它很神祕。)

注意:當使用標籤名稱1.66作爲--rev選項或運行hg tags,Mercurial scans 全部頭爲全部爲.hgtags文件。有一些複雜的代碼來緩存結果,因爲此掃描很昂貴,但效果是hg tags應該列出標記,即使您在.hgtags文件中看不到它。


當你去重新創造它的標籤,水銀首先刪除舊的標籤(這是全零線),然後創建與它相同的哈希ID新標籤(這是f0519f072992c39346b65332e444492fc5694e14)線。新的.hgtags內容進入新的提交。由於f0519f072992c39346b65332e444492fc5694e14中的.hgtags文件是沒有出現1.66的文件的版本,因此更新到1.66應使全部三個行從文件中消失。但只要您更新到頭部,而不是標記1.66,您現在將看到所有三條線。同時hg tags應該繼續列出標籤。

+0

據我所知,標籤的修訂版本看不到它自己的標籤,但我的問題是標籤不能被標籤修訂版的子版本看到,即使檢出缺省的頭版本時也是如此。 – Chris

+0

有趣的......不應該發生,*提供*您更新(或讓您的GUI更新)到實際的頭,而不是標記的版本。如果使用命令行而不是TortoiseHg,問題會消失嗎? – torek

+0

我使用命令行進行檢查,如果這是你的意思,標籤不會顯示在'hg tags'中。 – Chris

相關問題