2012-10-09 70 views
2

我正在設置一個Mercurial存儲庫來跟蹤第三方代碼,大致遵循Rudi對this question的回答中描述的供應商默認分支機制。爲了快速檢索特定版本,我爲每個供應商和默認版本創建了標籤。爲什麼單獨的Mercurial分支中的標籤不起作用?

我通過提交一個空的.hgtags來建立默認分支來初始化repo,然後我導入第一個版本。添加一個新版本的過程是這樣的:

hg up -C vendor 
... load new version ... 
hg commit -A -m "Adding version x.y.x" 
hg tag vendor-x.y.z 
hg up -C default 
hg merge vendor 
hg commit -m "Merging version x.y.z" 
hg tag x.y.z 

在合併我始終保持.hgtags的本地副本,所以結果是,供應商分支具有包含而所有供應商的XYZ標籤.hgtags默認分支.hgtags只有xyz標籤。

我的理解是Mercurial在處理標籤時會考慮所有標題的.hg標籤。然而,當我運行hg tags時,結果只包含提示和x.y.z標記。無論我的工作目錄更新到哪個分支都是一樣的;它始終是來自默認分支.hgtags文件的標籤。

我可以更新到vendor-x.y.z標籤,所以Mercurial確實看到了它們的存在,但更新似乎給了我來自供應商分支提示的代碼。 x.y.z標籤正常工作。

我以前主要使用Git和SVN/CVS,所以我認爲這是一個理解問題,而不是技術問題。我曾嘗試過,以防萬一,在兩個版本的Mercurial(2.0.2和2.3.2)上獲得了相同的結果。

回答

1

我不是在我的Mercurial系統前面進行驗證,但我認爲問題在於Mercurial只考慮拓撲元首的.hgtags而不是分支元首。例如:

[1]---[2]---[5]---[6] Default 
     \  /
     [3]---[4]  Vendor 

[6]是一個拓撲頭,[4]和[6]是分支頭。解決方案是在合併時保留對.hg標籤的所有更改。

編輯

這裏是我的測試。合併後直接接受本地.hg標籤,hg tags僅在default上顯示標籤。我無法更新到供應商標籤,這與您所看到的不同。我正在使用Mercurial 2.3.1。在供應商創建另一個變更集並製作第二個拓撲頭之後,重新出現缺失標籤。

和輸出:

C:\>hg init test 
C:\>cd test 
C:\test>echo 1>a 
C:\test>hg ci -Am 1 
adding a 
C:\test>hg branch vendor 
marked working directory as branch vendor 
(branches are permanent and global, did you want a bookmark?) 
C:\test>echo 1>b 
C:\test>hg ci -Am 2 
adding b 
C:\test>hg tag v1 
C:\test>hg update default 
0 files updated, 0 files merged, 2 files removed, 0 files unresolved 
C:\test>hg tag d1 
C:\test>hg merge vendor --tool internal:local 
1 files updated, 1 files merged, 0 files removed, 0 files unresolved 
(branch merge, don't forget to commit) 
C:\test>hg ci -m Merge 
C:\test>hg tags 
tip        4:80759c41b3cc 
d1         0:17b05ed457d1 
C:\test>hg update vendor 
1 files updated, 0 files merged, 0 files removed, 0 files unresolved 
C:\test>hg tags 
tip        4:80759c41b3cc 
d1         0:17b05ed457d1 
C:\test>hg update d1 
0 files updated, 0 files merged, 2 files removed, 0 files unresolved 
C:\test>hg update v1 
abort: unknown revision 'v1'! 
C:\test>hg update vendor 
2 files updated, 0 files merged, 0 files removed, 0 files unresolved 
C:\test>echo 1>c 
C:\test>hg ci -Am 3 
adding c 
C:\test>hg tags 
tip        5:a2c0fe73a9f1 
v1         1:3168d0f4e5e5 
d1         0:17b05ed457d1 
C:\test>hg update v1 
0 files updated, 0 files merged, 2 files removed, 0 files unresolved 
C:\test>hg update d1 
0 files updated, 0 files merged, 1 files removed, 0 files unresolved 
+0

這將是有意義的,但如何將產生的行爲,其中水銀讓我更新到與其他標籤中的一個(不產生「沒有這樣的標記「錯誤),而實際更新到該分支的提示? – DNS

+0

我添加了一個確認我猜對的行爲的例子。你能重現你所看到的行爲並更新你的問題嗎?不過,答案是通常合併.hg標籤。這是標準的事情。 –

相關問題