gpt4 book ai didi

mercurial - 为什么 Mercurial merge 时很笨?如何使拉取/merge 更改变得更简单?

转载 作者:行者123 更新时间:2023-12-02 10:20:06 26 4
gpt4 key购买 nike

我刚刚开始使用 Mercurial,我想我正在尝试做一些非常简单的事情,一些应该非常典型的事情,但我很困惑为什么它如此复杂,以及为什么它不能正常工作应该(国际海事组织)。

我与 friend 共享一些存储库,他做了一些更改并检查了几个文件并推送它们。现在在 svn 中,我习惯于只更新我的工作副本并获取他的更改,没有麻烦。但显然我必须与 Mercurial merge 。我不明白的是:mercurial 是否应该足够聪明才能弄清楚,如果我的 friend 进行了最新的更改,并且我没有触及这些文件,那么它应该只使用他的文件版本?显然它无法弄清楚这一点,而是尝试 merge 完全失败的文件(实际上我已经安装了自动打开的Beyond Compare,所以我不能将错误的 merge 完全归咎于mercurial)。

无论如何,我不知道为什么它甚至必须“merge ”文件,因为(对我来说)很明显它应该只进行远程(即最近的)更改。我在使用该工具的方式上是否做错了什么,或者我可以做些什么来让它以更简单的方式工作(我习惯于在颠覆中工作的方式)...是否有任何配置设置,有关命令行标志的任何提示我可以用来让它更好地工作吗?

最佳答案

如果您也已在存储库中提交,则只需 merge 。如果你与你的 friend 共享存储库,他会在你不做任何事情时提交一次或多次,当他完成后你所要做的就是拉取和更新,而不是 merge 。

如果您已完成本地提交,则该场景的展开方式如下:

local:    1---2---3---4
central: 1---2---3---4
friend: 1---2---3---4

他 promise :

local:    1---2---3---4
central: 1---2---3---4
friend: 1---2---3---4---5---6

您 promise :

local:    1---2---3---4---X---Y
central: 1---2---3---4
friend: 1---2---3---4---5---6

他推:

local:    1---2---3---4---X---Y
central: 1---2---3---4---5---6
friend: 1---2---3---4---5---6

你拉:

local:    1---2---3---4---X---Y
\
+-5---6

central: 1---2---3---4---5---6
friend: 1---2---3---4---5---6

您 merge :

local:    1---2---3---4---X---Y---7
\ /
+-5---6-+

central: 1---2---3---4---5---6
friend: 1---2---3---4---5---6

然后你推,他拉,所有存储库都是相同的。

但是,如果您在他参与该项目期间没有做任何事情,那么该场景将如下所示:

local:    1---2---3---4
central: 1---2---3---4
friend: 1---2---3---4

他 promise :

local:    1---2---3---4
central: 1---2---3---4
friend: 1---2---3---4---5---6

他推:

local:    1---2---3---4
central: 1---2---3---4---5---6
friend: 1---2---3---4---5---6

您拉取并更新:

local:    1---2---3---4---5---6
central: 1---2---3---4---5---6
friend: 1---2---3---4---5---6
<小时/>

这与 Subversion 的做法不同的原因是,使用 Subversion,您拥有每个人都必须与之交谈的集中存储库。

因此,当您提交本地更改时,Subversion 客户端会说“抱歉,您需要先更新才能提交”,并且您必须执行该更新。

如果此时您更改的文件也在中央存储库中进行了更改,Subversion 会将您的本地更改与服务器更改 merge ,并将您的修订点更新到提示。如果没有冲突,这将是静默 merge ,否则您将遇到 merge 冲突。

Mercurial 做完全相同的事情,只是 merge 不是静默的。你们都可以在自己的本地存储库中单独提交,而无需相互交谈,但是当您尝试将所有更改集成到一个公共(public)存储库中时,您需要 merge 。 Mercurial 永远不会更改现有变更集(除非您使用某些扩展来进行历史编辑),因此它不能自动确定并行变更集如何协同工作。

如果你们两个没有处理过相同的文件,或者您对相同文件所做的更改彼此不冲突,那么只需单击几下即可完成 merge 。

无论如何,Mercurial 有很多选择,但分布式部分确实改变了您思考历史的方式。

关于mercurial - 为什么 Mercurial merge 时很笨?如何使拉取/merge 更改变得更简单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5100563/

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