gpt4 book ai didi

version-control - Mercurial 中变化的传播

转载 作者:行者123 更新时间:2023-12-01 11:03:43 24 4
gpt4 key购买 nike

我有以下问题。假设我托管了一堆构成层次结构的存储库,例如:A -> B -> C(意味着 A 是中央存储库,其余的都是它的后代)。

现在假设我使用 C 的克隆。假设我不仅要从 C 中获取更改,还要从中央存储库中获取更改,因此我执行以下命令:

hg pull [Address of A]
hg up

这看起来完全合法,但是当我提交更改并将它们推送到 C 时会发生什么?不仅会推送我的本地修改,还会推送中央存储库的修改(如果有的话)。如果有人试图将更改从 A 拉到 C,会发生什么?是否会发生冲突,或者它会成功地将更改 A -> 本地 -> C 与更改 A -> C merge 。Mercurial 是否会将其识别为相同的更改集?

如果我认为我的代码足够稳定并且可以放在中央存储库中,则会发生相同的情况:

hg commit -u spirit -m "A local modification that is stable"
hg push [Address of A]

如果我从 A 拉取到 C,然后再次从 C 拉取到我的本地存储库,会发生什么情况,它会识别这些变更集源 self 的本地存储库,还是会报告冲突并建议 merge ?

在这种情况下,最佳做法是什么?仅执行后续的拉取和推送(即 A<->B、B<->C、C<->local)?但问题是我只能访问我的本地存储库,它是 C 的克隆。如果我想在我的本地机器上,我如何从 B 拉到 C? Mercurial 是如何处理的

最佳答案

What will happen if someone will try to pull the changes from A to C? Will there be a conflict or it will merge successfully the changes A -> local -> C with changes A -> C. Will Mercurial recognize it as the same changeset or not?

C 中已经存在的变更集将被视为已经存在,因为它们的 ID 已经存在。这就是为什么变化是不可变的。如果你可以修改一个变更集,它的 ID 就会改变(ID 是变更集内容的散列)。 Mercurial 然后(正确地)将其视为不同的变更集。通过保持变更集不可变,我们可以确保无论它们来自哪个 repo,它们的哈希都是相同的。

  • pull = 从那里复制具有我没见过的 ID 的变更集
  • push = 将变更集复制到那边有他们没见过的 ID

Will there be a conflict

没有

or it will merge successfully the changes A -> local -> C with changes A -> C.

不会发生 merge ,因为它们是相同的更改。它只是看到它已经拥有它们。

merge 不会发生,除非您想要 merge 来自两组并行更改的更改,除非您明确要求 merge 。

关于version-control - Mercurial 中变化的传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8238159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com