Mercurial(Hg)能告诉我分支或提交的远程是什么吗?

时间:2017-11-17 18:52:44

标签: git mercurial git-log hg-log

我有一个包含2个遥控器的Mercurial(Hg)存储库,我们称之为defaultupstream

我已从两个遥控器中取出并想知道哪些提交/分支来自远程调用default,哪些提交/分支来自远程调用upstream。我如何在Hg中实现这一目标?

理想情况下,我想使用hg log命令,就像我使用我更熟悉的git log --describe --all命令一样。

hg log命令的模板是否等同于git log --describe

注意:我已经知道使用hg out <remote>向我展示我感兴趣的遥控器上没有提供的提交集,但我希望能有更多视觉效果。

2 个答案:

答案 0 :(得分:3)

如果标准HG工作流程没有发生巨大变化(在另一个扩展名remotenames中假设),则默认样式下,您可以将Remote Branches Extension添加到Mercurial

答案 1 :(得分:1)

  

我已从两个遥控器中取出并想知道哪些提交/分支来自远程调用default,哪些提交/分支来自远程调用upstream。我如何在Hg中实现这一目标?

一般来说,你不能。 (但请参见下文和Lazy Badger's suggested extension。)

Git实际上也没做到这一点。尽管如此,你可以如你所说:

  

...使用git log --describe --all命令...

这并没有告诉您谁向您提交了提交。相反,它告诉你你的哪些参考是&#34;最接近&#34;到了将要描述的提交(&#34;最接近&#34;以模糊的手动方式定义)。 Mercur不会做的是,在您的存储库中创建特定的引用 - 远程跟踪名称,如remote1/branchremote2/branch - 记住哪个提交由名称{分别在remote1和remote2上{1}}。

如果两个遥控器中只有一个首先具有那些提交,那么只有一个这样的引用可以是#34;最接近的&#34;。 Git会选择那个,然后你可以推断谁有提交,谁没有提交。如果两个遥控器都有提交,它会失败,或者可能会失败:你得到一个任意的引用(根据你的基本目标,这可能就足够了)。

现在,你可以某事。具体来说,在这种情况下的问题是Mercurial的分支名称是全局的,并且提交永久地粘贴到它们所在的分支上。如果您连接到remote1并接收一些提交,它们拥有它们拥有的任何哈希ID和分支名称,并且您的Mercurial将它们存储在您的存储库中相同的哈希ID并使用相同的名称 - 现在Mercurial(如Git)会忘记源,因为那些现在是你的提交。

但是你知道刚进入的任何提交(如果有的话)来自remote1,而不是remote2。此外,如果任何提交 进入,他们将增加本地修订ID号(branch)。您可以在某处保存新号码甚至整个范围。 所有的那些提交在那个范围内,&#34;旧提示+ 1&#34;到#34;新提示&#34;包容性,来自remote1。

对remote2重复此操作:任何到达的新提交都来自它们。

(还有另一种选择,但它很激烈:你可以使用转换扩展来更改提交的分支名称。如果你这样做,不过,你如果你想要的那样,你必须复制,即移植或改造提交,以便稍后将它们移动到原始分支。还有其他更好的扩展,但不像转换,它们不与Mercurial一起分发。)