以下mercurial命令之间的区别
pull -b <branchname>
vs pull -r <branchname>
我搜索了很多,但结果好坏参半,但没有一个是明确的。
任何人都可以解释一下应该使用一个在另一个之上的区别和场景吗?
答案 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
假设变更集a
,b
,c
,d
,e
,f
都在分支{{1}中}。
如果您default
,则hg pull --rev default
被解释为修订版,它指的是远程仓库中分支default
的最新头部;在两个主要版本default
和d
中,最新版本是f
(它可能比f
最近被推入远程仓库),因此您的命令将是相当于d
。这将进入您的回购修订版hg pull --rev f
及其所有祖先,即修订版f
,a
,b
,e
。由于修订f
,a
已经在您的本地仓库中,因此您实际上会提取b
,e
。
另一方面,f
会将分支hg pull --branch default
中的所有修订,即default
,a
,b
,{{1 },c
,d
。由于e
,f
已经在您的回购中,因此您实际上会提取a
,b
,c
,d
。
总而言之,可以说e
将远程仓库中的所有分支f
的所有负责人(加上他们的祖先变更集,减去您已经拥有的变更集)拉入本地仓库。本地回购),wheras hg pull --branch branchname
只拉出远程仓库中分支branchname
的最新头(加上它的所有祖先变更集,减去你已经拥有的变更集)当地回购)。因此,如果您使用的是标准的单头命名分支工作流程,那么最新的头部将始终是 only 头部,因此就您而言,这两个命令是等效的