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

2023-12-20

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

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

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


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

如果您已完成本地提交,则场景将如下所示:

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

他承诺:

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

您承诺:

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

你合并:

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

他承诺:

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 会将您的本地更改与服务器更改合并,并将您的修订点更新到提示。如果没有冲突,这将是静默合并,否则您将遇到合并冲突。

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Mercurial 合并时很笨?如何使拉取/合并更改变得更简单? 的相关文章

随机推荐

  • 模拟继承的受保护方法

    我这里有我的问题的简化版本 A类有一个受保护的方法 B类继承了这个方法 public class A protected String getString some Code public class B extends A public
  • 是否有被认为“安全”的 GHC 扩展列表?

    有时 如果没有至少一种语言扩展 我想编写的一段代码是不合法的 当试图在研究论文中实现想法时尤其如此 这些论文往往使用论文撰写时可用的任何漂亮的 超级扩展的 GHC 版本 而没有明确实际需要哪些扩展 结果是我的 hs 文件顶部经常出现这样的内
  • 如何使用货币格式化散景 xaxis 刻度

    我正在使用 jupyter 笔记本制作子弹图来比较两个值 该图已渲染 但我想格式化 x 轴刻度以显示货币 这就是我到目前为止所拥有的 project Rocket targetspend 15000 spend2date 16600 dat
  • 在滚动条上突出显示活动菜单项

    我正在使用 jQuery 进行单页导航 我想要的是当用户滚动时 突出显示的菜单将发生变化 我想出了以下代码 HTML
  • 访问链接 (lnk) 文件目标路径的 VB.NET / C# 代码会产生一些错误路径

    我找到了这段代码 Public Shared Function GetLnkTarget ByVal lnkPath As String As String Dim shl New Shell32 Shell Move this to cl
  • 如何判断一个整数是偶数还是奇数[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions def is odd num Ret
  • ASP.NET 与 EVAL 绑定

    我正在尝试对 asp net 组合框执行以下操作 Text 我想做的是 如果 名称 列为空 则绑定到 其他 列 否则绑定到 名称 列 任何人都知道正确的语法 不断获取未设置为引用的对象 我在 VB Net 中这样做 Thanks Jim 试
  • android 媒体播放器媒体控制器超时

    我已经实现了一个媒体播放器和媒体控制器来传输 mp3 url 然而 我在 TMobile 网络上的设备无法获得良好的 3G 信号 因此它在 EDGE 上运行 我假设媒体播放器因流太慢或不完整而崩溃 是否可以设置超时 没有timeout中的方
  • 拥有字符串映射如何将其与给定字符串进行比较

    我们有像 name location 这样的字符串对的映射 unix 就像绝对位置 a lamyfolder 我们得到了一些位置a lamyfolder mysubfolder myfile 如何找到哪个地图位置最适合给定的网址 例如我们有
  • 通过 DispatchGroup 与 DispatchQueue 访问主队列

    我在一个在后台线程上运行的类中使用 DispatchGroup 偶尔需要更新UI 所以调用如下代码 dispatchGroup notify queue main self delegate moveTo sender self locat
  • 在Spring Boot MVC中添加ShallowEtagHeaderFilter

    我正在尝试调整我的应用程序配置以设置 ETag 支持 我刚刚检查过this https stackoverflow com questions 26151057 add a servlet filter in a spring boot a
  • 如何更改Xamarin菜单栏中的后退按钮?

    这就是我所拥有的 这就是我想要得到的 如果导航堆栈中没有页面 则标题图标将位于左上角 否则将有后退箭头和 后退 文本 我没有找到任何自定义它的选项 有可能吗 如果您使用的话 您可以将箭头更改为汉堡包图标MasterPage在导航页面内 De
  • 如何允许外部访问私有 Azure DevOps NuGet 源

    情况如下 DevOps Org A维护私有 NuGet 提要 DevOps Org B需要在其 Pipelines 中使用上述 feed 中的包 目前的解决方案包括 添加用户U from Org B作为客人Org A具有利益相关者角色的 D
  • 恒等函数在哪里以及为什么有用?

    我明白为什么函数组合很重要 它允许从小而简单的函数构建大而复杂的函数 val f A gt B val g B gt C val h f andThen g compose f and g 该成分符合identity and 关联性 law
  • 产品图片不显示 (Woocommerce)

    我的产品图片出现 但当我点击进入产品页面时 图片被隐藏 只有当我点击时才会出现 某些产品会在其他浏览器上显示 某些产品仅在 Microsoft Edge 上显示 Edit The real problem to that was cloud
  • 替换 PHPUnit 方法 `withConsecutive` (在 PHPUnit 10 中废弃)

    作为方法withConsecutive将在 PHPUnit 10 中删除 在 9 6 中已弃用 我需要将此方法的所有出现替换为新代码 尝试寻找一些解决方案 但没有找到任何合理的解决方案 例如 我有一个代码 this gt personSer
  • Django-graphene 同一模型有多种类型

    我有一个相当大的graphene djangoAPI 为两个应用程序提供支持 我限制对某些字段的访问的第一个方法是拥有多个DjangoObjectTypes对于同一型号 并使用fields限制每种类型可以访问哪些字段 示例Organizat
  • 节点应用程序 docker 映像在本地运行并在 Amazon ECS 上失败

    该应用程序可以在本地正常部署和运行很长一段时间 没有出现任何问题 然而 在 Amazon ECS 上 它似乎总是在空闲运行大约 2 30 分钟后崩溃 怎么了 Dockerfile Set the node alpine base image
  • 计算 SPARQL 中的个体数量

    我对 SPARQL 完全陌生 我想计算这个本体中的参与者数量 http data linkedmdb org directory actor http data linkedmdb org directory actor 我尝试了以下方法
  • 为什么 Mercurial 合并时很笨?如何使拉取/合并更改变得更简单?

    我刚刚开始使用 Mercurial 我想我正在尝试做一些非常简单的事情 一些应该非常典型的事情 但我很困惑为什么它如此复杂 以及为什么它不能按应有的方式工作 国际海事组织 我与朋友共享一些存储库 他做了一些更改并检查了几个文件并推送它们 现