JavaScript 或 PHP 中的三向合并

发布于 2024-08-11 09:19:10 字数 1541 浏览 4 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

随梦而飞# 2024-08-18 09:19:10

不完全是三向合并,但 Google 的"Diff Match 和 Patch 库提供了强大的算法执行同步纯文本所需的操作”。该实现可用于 Java、JavaScript、C++、C#、Lua 和 Python。

Not exactly three-way merge, but Google's "Diff Match and Patch libraries offer robust algorithms to perform the operations required for synchronizing plain text". And the implementation is available in Java, JavaScript, C++, C#, Lua and Python.

笑饮青盏花 2024-08-18 09:19:10

刚刚完成了这样一个 js 和 php 工具的工作。看看并享受:

https://github.com/Krassmus/Textmerger

你只需要 编写

var merged = Textmerger.get().merge(original, mytext, theirtext);

用 PHP

$merged = Textmerger::get()->merge($original, $mytext, $theirtext);

或即可完成。

Just finished my work on such a js- and php-tool. Have a look and enjoy:

https://github.com/Krassmus/Textmerger

You'd just need to write

var merged = Textmerger.get().merge(original, mytext, theirtext);

or in PHP

$merged = Textmerger::get()->merge($original, $mytext, $theirtext);

and you're done.

懵少女 2024-08-18 09:19:10

在发现 npm 包 3-way-merge 和 Three-way-merge(出现在“三向合并 npm”搜索结果中的主要包)运行不佳且未得到维护后,我偶然发现了这个更大更有帮助

https://www.npmjs.com/package/diff3

我们最终像这样编写我们的解决方案:

var diff3 = require('diff3');
var mergeData = diff3(sourceArray, originalArray, targetArray);

var result = mergeData.map(({ok, conflict}) => {
  if (ok) {
    return ok;
  }
  else if (conflict) {
    return [
      '<<<<<<< target',
      ...conflict.b,
      '>>>>>>> target',
      '<<<<<<< source',
      ...conflict.a,
      '>>>>>>> source'
    ];
  }
}).flat();

After finding that the npm packages 3-way-merge and three-way-merge (the main ones that show up in search results for "three way merge npm") didn't work well, and are not maintained, I stumbled upon this much larger more helpful

https://www.npmjs.com/package/diff3

We ended up writing our solution like so:

var diff3 = require('diff3');
var mergeData = diff3(sourceArray, originalArray, targetArray);

var result = mergeData.map(({ok, conflict}) => {
  if (ok) {
    return ok;
  }
  else if (conflict) {
    return [
      '<<<<<<< target',
      ...conflict.b,
      '>>>>>>> target',
      '<<<<<<< source',
      ...conflict.a,
      '>>>>>>> source'
    ];
  }
}).flat();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文