mercurial命令之间的区别pull -b <branchname> vs pull -r <branchname> </branchname> </branchname>

时间:2014-11-26 17:17:05

标签: mercurial

以下mercurial命令之间的区别

pull -b <branchname> vs pull -r <branchname>

我搜索了很多,但结果好坏参半,但没有一个是明确的。

任何人都可以解释一下应该使用一个在另一个之上的区别和场景吗?

2 个答案:

答案 0 :(得分:1)

此:

pull -b <branchname>

具体说“branch&lt; branchname&gt;”。

此:

pull -r <branchname>

具体说“匹配&lt; branchname&gt;”的修订版。

只有当分支的名称可能意味着不同的东西时,两者才会有所不同。例如,这完全合法:

hg branch 21e34fb985bb

但是,如果这也是变更集的标识哈希,则此命令现在有点含糊不清:

hg pull -r 21e34fb985bb

您的意思是具有该名称的分支,还是具有该哈希的变更集?

使用-b <branchname>使用分支,另一个不确定。

重要吗?很可能不会,如果我愿意你为你的分支选择不同的命名约定。

答案 1 :(得分:1)

hg pull --branch branchname中,branchname指的是名为branchname的分支。

hg pull --rev branchname中,branchname被解释为修订版,它引用的是作为远程分支branchname的最新头部的修订版本回购。这在NamedBranches documentation

中提到
  

分支名称可以在标记名称可以使用的任何地方使用,包括日志,   差异,推动和拉动。当一个分支有多个头时,最尖端   将找到该分支的修订版。

如果分支branchname在远程仓库中有多个头,则这两个命令可能会有不同的结果。

考虑以下情况:

o  f
|
o  e
|
| o  d
| |
| o  c
|/
o  b          o  b
|             |
o  a          o  a

remote        local

假设变更集abcdef都在分支{{1}中}。

如果您default,则hg pull --rev default被解释为修订版,它指的是远程仓库中分支default的最新头部;在两个主要版本defaultd中,最新版本是f(它可能比f最近被推入远程仓库),因此您的命令将是相当于d。这将进入您的回购修订版hg pull --rev f及其所有祖先,即修订版fabe。由于修订fa已经在您的本地仓库中,因此您实际上会提取be

另一方面,f会将分支hg pull --branch default中的所有修订,即defaultab,{{1 },cd。由于ef已经在您的回购中,因此您实际上会提取abcd

TL; DR

总而言之,可以说e将远程仓库中的所有分支f的所有负责人(加上他们的祖先变更集,减去您已经拥有的变更集)拉入本地仓库。本地回购),wheras hg pull --branch branchname只拉出远程仓库中分支branchname最新头(加上它的所有祖先变更集,减去你已经拥有的变更集)当地回购)。因此,如果您使用的是标准的单头命名分支工作流程,那么最新的头部将始终是 only 头部,因此就您而言,这两个命令是等效的