2015-04-28 126 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'的问题。) –