问题标签 [diff]

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.

0 投票
4 回答
56553 浏览

.net - .NET 的任何体面的文本差异/合并引擎?

要求:

  • 免费,最好是开源的
  • 在 .NET 托管语言之一中实现

谷歌发现了这些:

编辑:

请不要应用程序,只有库。

0 投票
4 回答
9042 浏览

.net - WinForms 或 WPF 的文本差异可视化控件

继续我上一个问题,文本差异可视化有什么好的控件吗?

类似于 StackOverflow 的修订差异查看器,但适用于 WinForms 或 WPF

要求:

  • 免费,最好是开源的
  • 基于 WPF 或 WinForms

请不要应用程序,只有组件。

我对 OSS 差异工具不感兴趣

0 投票
5 回答
4443 浏览

unit-testing - 用于比较 NUnit 中的文本文件的单元测试

我有一个类可以处理 2 个 xml 文件并生成一个文本文件。

我想编写一堆单元/集成测试,这些测试可以单独为这个类通过或失败,它们执行以下操作:

  1. 对于输入 A 和 B,生成输出。
  2. 将生成文件的内容与预期输出的内容进行比较
  3. 当实际内容与预期内容不同时,失败并显示一些关于差异的有用信息。

下面是该类的原型以及我在单元测试中的第一次尝试。

有没有我应该用于这种测试的模式,还是人们倾向于编写数以万计的 TestX() 函数?

有没有更好的方法来哄骗 NUnit 的文本文件差异?我应该嵌入文本文件差异算法吗?




更新

我对测试差异功能不感兴趣。我只是想用它来产生更具可读性的失败。

0 投票
11 回答
18814 浏览

c# - 文本差异算法

我需要一种算法,可以比较两个文本文件并突出它们的差异,并且(甚至更好!)可以以有意义的方式计算它们的差异(比如两个相似文件的相似度分数应该高于两个不同的文件,用“相似”这个词以正常术语定义)。这听起来很容易实现,但事实并非如此。

实现可以在 c# 或 python 中。

谢谢。

0 投票
4 回答
3334 浏览

svn - 使用 Mercurial,是否有一种简单的方法可以将我的工作副本与默认远程存储库中的提示文件进行比较

使用 mercurial 时,我希望能够将文件的工作副本与默认远程存储库中的提示文件进行比较。是否有捷径可寻?

我知道我可以做一个“hg incoming -p”来查看即将到来的补丁集,但是如果我拉一下我会直接看到一个特定文件的实际更改会很好最新的东西(或者我可能会推出的东西)。

我现在能想到的最简单的事情是创建一个小脚本,查看 .hg/hgrc 中的默认位置并使用 curl 下载文件(如果它通过 http,否则通过 ssh scp,或者只是做一个如果它在本地文件系统上,则直接 diff),然后将工作副本或提示与该临时副本进行比较。

我正在尝试向我的团队推销 mercurial,我的一位团队成员今天提出了这一点,因为他们可以使用他们的 GUI 工具在 SVN 中轻松完成。

0 投票
5 回答
487 浏览

database - 什么是最有效地编辑“时间表”的好算法?

这是一个小型调度应用程序。我需要一种算法来有效地比较两个“时间表”,找出差异,并仅更新已更改的数据行,以及另一个表中具有该表作为外键的条目。这是一个大问题,所以我马上说我正在寻找一般建议具体解决方案

编辑:正如建议的那样,我已经大大缩短了这个问题。

在一张表中,我将资源与使用它们的时间跨度相关联。

我还有第二个表(表 B),它使用表 A 中的 ID 作为外键。

对应于表 B 的表 A 中的条目将具有包含表 B 中的时间跨度的时间跨度。并非表 A 中的所有条目都将在表 B 中具有条目。

我为用户提供了一个界面来编辑表 A 中的资源计划。他们基本上为表 A 提供了一组新数据,我需要将其视为与数据库中版本的差异

如果他们从表 B 指向的表 A 中完全删除了一个对象,我也想从表 B 中删除该条目。

因此,给定以下 3 组:

  • 表 A 中的原始对象(来自数据库)
  • 表 B 中的原始对象(来自数据库)
  • 表 A 中已编辑的对象集(来自用户,因此没有唯一 ID)

我需要一个算法,它将:

  • 如果不需要对这些对象进行更改,则保持表 A 和表 B 中的行不变。
  • 根据需要向表 A 添加行。
  • 根据需要从表 A 和表 B 中删除行。
  • 根据需要修改表 A 和表 B 中的行。

只需将对象排序到我可以应用适当的数据库操作的排列中,就足以解决问题了。

再次,请根据您的喜好具体一般地回答,我正在寻找建议,但如果有人有一个完整的算法,那会让我很开心。:)

编辑:作为对 lassvek 的回应,我提供了一些额外的细节:

表 B 的项目总是完全包含在表 A 项目中,而不仅仅是重叠。

重要的是,表 B 的项目是量化的,因此它们应该完全落在内部或完全外部。如果这没有发生,那么我将遇到必须单独处理的数据完整性错误。

例如(使用简写):

所以我想要以下行为:

  • 如果我从表 A 中删除 ID 02,或者将其缩短到下午 2:00 - 3:00,我应该从表 B 中删除 ID 01。
  • 如果我将表 A ID 01 扩展到它在下午 1:00 结束的位置,这两个条目应该合并到一行中,表 B ID 01 现在应该指向表 A ID 01。
  • 如果我从表 A ID 01 中删除 8:00AM-10:00AM,则该条目应分为两个条目:一个用于 7:00AM-8:00AM,一个新条目 (ID 03) 用于 10:00AM-11: 00AM。
0 投票
2 回答
10253 浏览

hibernate - 休眠:比较当前和以前的记录

我想将内存中 Hibernate 实体的当前值与数据库中的值进行比较:

CODEBLOCK#1中,我得到了newEntity.getProperty()="new value"AND oldEntity.getProperty()="new value"(当然,我期望oldEntity.getProperty()="old value"的是)。实际上这两个对象在内存中是完全一样的。

我搞砸了HibernateSessionFactory.getSession().evict(newEntity)并试图oldEntity=null摆脱它(我只需要它来进行比较):

现在这两个实体是不同的,但我当然会感到恐惧org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session

任何的想法?

编辑:我尝试了双会话策略;我修改了我HibernateSessionFactory以实现会话地图,然后......

我的单元测试在尝试打印 oldEntity 注释时挂起...... :-(

0 投票
2 回答
498 浏览

filesystems - 在远程系统上应用文件结构差异/补丁?

是否有创建文件结构差异的工具,可能基于 MD5 清单。我的目标是通过网络发送一个包含新/更新文件和要删除的文件列表的包。它需要复制新/更新的文件并删除源文件结构中已删除的文件吗?

0 投票
5 回答
10919 浏览

visual-studio - Team Foundation Server (TFS) 文件差异查看器 - 使用其他工具进行自定义

我正在为 Visual Studio 2005 使用 Team Foundation Server (TFS)。

每当我想比较两个文件的版本时,TFS 都会显示一个带有差异的窗口。

问题是它总是垂直分割。

实际上,几乎每次,我都希望将其水平拆分。 我已经查看了 TFS 选项并进行了谷歌搜索,但我一无所获。我很震惊地认为这样的选项不可用!

有什么方法可以配置 TFS 以水平拆分它?

0 投票
4 回答
10779 浏览

svn - 如何正确使用 KDiff3 与 TortoiseSVN 来解决冲突?

我将 TortoiseSVN 设置为使用 KDiff3 作为冲突解决工具(我发现它比内置的 TortoiseMerge 显示了更多对合并有用的信息)。

当我使用 Tortoise 的“编辑冲突”命令打开一个文件时,它会显示三个文件,我必须手动选择“合并->合并当前文件”。问题是 KDiff3 将结果保存到source_file.working而不是 to source_file。因此,如果不执行另存为,则存在冲突的真实文件不会被修改。有没有办法每次都做这个手册另存为?

我知道这不是一个严格的编程问题,而是关于一个对程序员来说足够普遍的辅助过程,它在这里应该很有用。我在别处找不到这个问题的答案。