为什么Mercurial需要与服务器通信,列出传出(非推送)提交?

时间:2012-03-12 17:11:34

标签: mercurial dvcs

当我输入hg outgoing时,我得到这样的回复:

comparing with ssh://server:1234/path/to/repo

并且在通过网络进行通信时会出现延迟。

为什么需要此网络流量? Mercurial是否存在一些基本的东西,这意味着它无法记住哪些提交被推送,哪些提交没有?

是否有替代命令可以在不通过网络进行通信的情况下向我提供类似的信息?

2 个答案:

答案 0 :(得分:14)

由于Mercurial是一个分布式系统,因此您可以通过多种方式将更改从本地仓库转移到远程仓库。

例如:

  • 某人可以从您那里提取更改,然后将这些更改推送到远程仓库
  • 你实际上可以使用你拥有的任何操作系统复制你的本地仓库,Mercurial完全没有意识到这一点。然后,您可以将此副本中的更改推送到远程仓库。

但是,如果您有Mercurial 2.1或更高版本,则可以使用hg phase来确定已推送的更改集。假设您没有使用hg phase来更改任何更改集的状态,那么相位为draftsecret的更改集尚未推送,且相位为public的更改集有。使用

$ hg log -r "not public()"

查看未发布的变更集。

它不会抓住我上面给出的两个例子,但如果你只是想知道你没有推动哪些变更集,它可能会很好。

查看here或查看hg help phases以获取有关如何使用阶段的说明。

答案 1 :(得分:3)

mercurial存储库可能与多个其他存储库连接。所以,我想它需要确保未从您的存储库推送的更改不会从另一个存储库到达。