问题标签 [three-way-merge]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
version-control - 有人尝试过 DiffMerge 作为 Evolphin Zoom 版本控制客户端的默认 3 路合并工具吗?
到目前为止,在使用 Evolphin Zoom 解决文本文件中的冲突时,我们一直使用 MacOS XCode FileMerge/OpenDiff 工具作为我们默认的 3 路合并工具。有没有人尝试过使用 DiffMerge 或其他 3 路合并工具?我发现 FileMerge 有时会做一些没有意义的奇怪合并。由于 Evolphin Zoom 允许插入其他合并工具,我想看看 MacOS 上的最佳选择是什么?Diffmerge 是开源的 - 它在复杂的合并场景中是否适合您?
version-control - 如何指定要在“hg 合并”中使用的合并基础
我正在尝试在复杂的 hg 存储库中进行复杂的合并。我对 Mercurial 选择用作执行合并的“基础”的“最新共享祖先”不满意。
我想指定一个我自己选择的特定提交作为基础。
这可能吗?如果可以,怎么做?
version-control - 为什么一个分支中的 Mercurial 退出会影响其他分支?
这是一个很难解释的情况,所以请耐心等待。我有一个 Mercurial 存储库,其中包含 2 个主要分支default和dev。
工作通常在dev的命名分支(功能分支)中完成。任何时候都可能有很多特性分支。一旦在该分支中完成工作,它就会合并回dev。
当准备发布时,另一个命名分支是从dev(发布分支)中创建的。有时有必要从发布中排除整个功能。如果是这种情况,则将功能分支合并到dev的合并变更集退出新的发布分支。
一旦发布分支准备好发布,它就会合并到默认值中(因此默认值始终代表生产中代码的状态)。开发分支和功能分支上的工作继续正常进行。
当需要进行另一个版本时,会出现问题,包括在前一个版本中取消的功能。一个新的发布分支正常创建(关闭dev)。这个新的发布分支现在包含从前一个发布分支回退的功能(因为回退是在发布分支上执行的,并且合并变更集仍然在开发分支上)。
这一次,当 release 分支准备好发布并合并到default时,由于先前版本分支中的合并回退而回退的任何更改都不会合并到default中。为什么会这样?既然新的发布分支包含了所有的特性分支变更集(什么都没有被撤销),为什么默认分支也没有接收到所有这些变更集呢?
如果以上所有内容都难以理解,这里是 TortoiseHg 的屏幕截图,显示了基本问题。“branch1”和“branch2”是功能分支,“release”和“release2”是发布分支:
alignment - 在“超越比较”的 3 路合并中控制手动对齐
在“Beyond Compare”中进行 3 路合并时,由于代码相似性,我们可以得到以下错位(X 是已删除的代码段,仅显示两个文件):
所需的对齐方式如下:
所以我在位置 2 和位置 1 之间进行了手动对齐,而我实际得到的是:
因此它设法在一行上进行对齐,但随后将其余代码向下移动。
我们如何使用手动对齐来获得预期的结果?更改设置以修改对齐参数也不会达到预期的结果。(另外注意:body和modified body很相似,所以不能错过搭配)
他们在他们的论坛上发表了一篇文章,其中提到了逐行对齐,但对于较长的部分来说,这将是非常乏味的。
编辑: 如果在当前版本中无法进行上述对齐,是否可以禁用输入和输出编辑器窗格的自动同步滚动,以便用户可以同时查看未对齐的代码部分。这些部分不会被程序对齐,但从用户的角度来看会被认为是对齐的。
version-control - Windows 上的 RCS - rcsmerge 总是失败
我正在使用来自Purdue RCS 官方主页的适用于 Windows 的 GNU RCS 5.7 版。如果我使用 rcsmerge(1) 命令合并来自不同分支的更改,则会收到错误消息:
每次。有谁知道为什么会发生这种情况(我至少在 10 年前就看到过这个问题)以及解决方法是什么?GNU 当前的 RCS 版本 5.8.1 是否修复了它?如果是这样,任何人都可以将我指向此版本的 Windows 二进制文件吗?
更新 2012-10-22:我已将 Purdue 发行版提供的 diifutils(cmp, diff, diff3, merge) 切换为当前 GNU diffutils 2.8.7 的等价物。这消除了subsidiary program failed
错误,但现在The filename, directory name, or volume label syntax is incorrect.
每次调用 rcsmerge 或 diff3 时正好给了我两次。这似乎是一条 Windows 错误消息。
excel - TFS 二进制文件三路合并自定义工具
我有一个在 Excel 工作簿中的 VBA 代码上进行三向合并的工具——我们称之为 XlMerge。我的 Excel 工作簿位于 TFS 内。我希望如果我将我的工具添加为用户工具,它将消除合并头痛。但是现在 TFS 没有为我的 xlsb 文件(二进制工作簿)显示“与自定义工具合并”按钮。有什么解决方案可以让 TFS 显示这个按钮吗?
javascript - Javascript中数组的三向比较函数
还有其他关于如何在 JavaScript 中比较数组的问题?. 我想知道的是编写/使用像 Array.sort() 所需的三路比较函数的最直接方法。这是一个使用默认设置的示例,但效果不佳:
这就是我想出的:
这给了我们想要的东西:
是否有更像单线的东西,或者我必须在任何时候定义自己的函数?
支持旧浏览器不是必需的。使用 jQuery 或 Underscore 之类的库是可以的。
看待这一点的一种方法是“应用于每对元素的标准三向比较中的第一个非零值”。但即便如此,我也没有在现有的库中找到合适的选择。
merge - 文件的三向合并(版本控制之外)
我有一个文件的三个版本:原始版本、我的更改和其他人的更改。我想进行三向合并以生成包含两组更改的版本(如果不可能,则失败)。请注意,我不是在询问任何版本控制系统,例如 svn 或 git。我想编写一个最小的命令行工具,它将三个文件作为输入并将合并写入标准输出。
一种方法如下,使用 Unix diff 和 patch 工具。假设这三个文件分别称为 orig、my、other:
% 差异 -u 原始我的 | 补丁 -o - 其他
或者反过来做,
% diff -u 其他 | 补丁 -o - 我的
但事实上有两种方法可以进行差异和合并,这有点代码味道。当然,将所有三个文件作为输入的合并工具可以做得更好。
显然,我可以初始化一个空的 svn 存储库,签入 orig,签入 my 和 other 在单独的分支中,然后进行合并。或者其他版本控制系统中的等效操作。但这似乎重量级且笨重,创建了一个将立即丢弃的存储库。
是否有一个合理的从命令行独立运行的三向合并工具?
merge - 实现三向差异/合并
我正在尝试在基本版本 X 和两个不同的衍生版本 A 和 B 之间实现三向差异/合并算法(在 python 中),但我无法弄清楚如何处理一些更改。
我有一个从 X 到 A 以及从 X 到 B 的逐行差异。这些差异为每一行提供一个“操作码” =
,如果该行没有改变,+
如果添加了一行,-
如果该行被删除,并且c
该行被更改(这只是一个-
紧跟一个+
,表示一行被删除然后替换,有效地修改)。
现在我正在比较来自 A-diff 和 B-diff 的相应操作码,以尝试决定如何合并它们。其中一些操作码组合很简单:这意味着两个版本都没有改变行,所以我们保留原来的=
。并且表示在一侧添加了一行,而在另一侧没有进行任何更改,因此接受添加并仅在添加该行的一侧前进到下一行。并且是用户必须解决的冲突,因为一侧更改了一行,另一侧删除了同一行。=
+
=
-
c
但是,我正在为如何处理 a+
和 a-
或 a+
和 a而苦苦挣扎c
。例如,在第一种情况下,我在一侧添加了新行,并在另一侧删除了后续行。严格来说,我不认为这是一个冲突,但是如果添加依赖于那条线呢?我想这适用于整个事情(在一个地方添加的东西可能依赖于其他地方的东西才有意义)。第二种情况也是类似的,我一边加了一行,另一边改了一行,但是添加的可能是依赖原版的行。
处理此问题的正常方法是什么?
git - 自定义合并驱动程序在 GitKraken 中不起作用
我正在尝试使用merge-po驱动程序https://github.com/mezis/git-whistles#merge-po智能合并 gettext 生成的翻译 *.po 文件。
驱动程序在 CLI 中运行良好(无冲突合并),但 GitKraken 完全忽略自定义合并驱动程序设置(尝试本地和全局)并产生不必要的冲突。有什么方法可以直接在 GitKraken 中使用自定义合并驱动程序?
~/.gitconfig
~/.gitattributes