2015-04-28 67 views
1

在mercurial repo中,您可以使用相同的名稱來創建分支,標記和書籤。 hg help revsets告訴你如何明確指定。我得到這個工作與例如Mercurial:在克隆時顯式指定分支/標記/書籤

hg update 'branch(foo)' 

但與

hg clone --updaterev 'branch(foo)' somerepo 

這使錯誤abort: unknown revision 'branch(foo)'!,即使

hg clone --updaterev 'foo' somerepo 

正常工作(給我的分支),只要不存在名稱衝突。我對標籤的觀察也一樣。 有沒有辦法在克隆時直接顯式指定分支/標籤/書籤?

+0

的[在善變的修訂類型的優先級(非常接近重複http://stackoverflow.com/questions/29920995/priority-of-revis離子類型式-善變)。 –

+0

雖然有關,但它們是兩個不同的問題。我決定分別專門詢問他們,以避免只得到一個部分的答案,這使得容易忽略仍然存在尚未解決的問題。我試圖詳細說明這個問題更具體。 –

回答

1

您需要:

  • 瞭解水銀
  • revset和單個版本之間的區別理解--updaterev使用revsets語言(hg help revsets)的場景和分支(ID)的後面將返回revset與所有變更的修訂,但--updaterev需要單變更

我懶得測試--updaterev與在同一時間在所有3個對象的回購協議,但(對於分支的情況下)--updaterev 'foo'定義FOO的頭部動作

之前內部有沒有辦法來明確指定分支/標籤/書籤直接 克隆時?

是的。只需使用正確的謂詞在revset清晰,唯一標識一個在每次變更需要您

  • 分公司:branch(foo) and head(),或者在多頭上分支,像last(heads(branch(foo)))
  • 書籤的情況下:bookmark(foo)
  • 標籤:tag(foo)
+0

感謝您的洞察力,它確實有道理。 但是,我仍然無法使用revsets語言來使用克隆,例如: 'hg clone --updaterev「rev(1)」somerepo'給出相同的錯誤('abort:unknown revision'rev(1)'! ')。 'hg clone --updaterev「1」somerepo'正常工作。 我使用的是hg版本3.1。 –

+0

@TrygveFlathen - 爲什麼不僅僅是'hg clone --rev 1',哪個有效? –

+0

'--rev'與'--updaterev'不一樣: updaterev會克隆整個回購,然後檢查給出的修訂版本,而rev只會克隆給定的修訂版和相關歷史記錄。我只是在這裏用'rev()'作爲一個簡單的例子來說明使用revset語言和'--updaterev'的問題。) –