1

我有一个带有 2 个遥控器的 Mercurial (Hg) 存储库,我们称它们defaultupstream.

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

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

是否有等效于的命令模板hg loggit log --describe

注意:我已经知道使用hg out <remote>它来向我展示我感兴趣的遥控器上没有哪些提交集,但我希望有一些更直观的东西。

4

2 回答 2

3

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

于 2017-11-18T08:34:56.437 回答
1

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

一般来说,你不能。(但见下文,以及Lazy Badger 的建议扩展。)

Git实际上也没有这样做。尽管如此,正如您所说,您可以:

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

这不会告诉您谁将提交提交给您。相反,它会告诉您哪些引用与要描述的提交“最接近”(“最接近”以模糊的 handwave-y 方式定义)。Git 所做的,而 Mercurial 没有,是在您的存储库中创建特定的引用 - 远程跟踪名称,例如remote1/branchremote2/branch- 记住哪个提交分别由branchremote1 和 remote2 上的名称标识。

如果两个遥控器中的一个恰好首先具有这些提交,那么只有一个这样的引用可以是“最接近的”。Git 会选择那个,你可以从中推断出谁有提交,谁没有。如果两个遥控器都有提交,它会失败,或者可能会失败:你得到一个任意的引用(这可能就足够了,这取决于你的潜在目标)。

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

但是您确实知道,刚刚进来的任何提交(如果有的话)都来自 remote1,而不是 remote2。此外,如果确实有任何提交,它们将增加本地修订 ID 号 ( -r -n tip)。您可以在某处保存该新数字,甚至是整个跨度。 在该范围内的所有这些提交,“旧提示 + 1”到“新提示”(包括)都来自 remote1。

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

(还有另一种选择,但它很激烈:您可以使用 Convert 扩展来更改提交的分支名称。但是,如果您这样做,您将被困在另一个分支上的那些提交:您将拥有复制(即移植或变基)提交,以便稍后将它们移动到其原始分支,如果您愿意的话。还有其他更好的扩展,但与 Convert 不同,它们不随 Mercurial 分发。)

于 2017-11-17T19:55:12.163 回答