忽略换行符的Diff工具

时间:2009-11-20 21:19:16

标签: sql merge diff newline word-diff

我经常需要比较SQL过程以确定最新版本中的更改。问题是,每个人都有自己的格式化风格,而SQL(通常)并不关心放置换行符的位置(例如,在一行中的所有子句与每行之前的换行符相对)。

这使得查看实际差异变得非常困难(特别是对于长程序而言)。我似乎无法找到一个免费的差异/合并实用程序,它将允许我忽略换行符(即视为空格)。到目前为止,我已经尝试过WinMerge和Beyond Compare而没有任何运气。有没有人知道一个diff工具(理想情况下是免费的)会看到这两个例子相同吗?

实施例。 1:

the quick
brown

实施例。 2:

the
quick
brown

提前致谢。

12 个答案:

答案 0 :(得分:10)

我真的很喜欢SourceGear's DiffMerge

它适用于所有平台,并且内置规则集,但允许您创建和添加自己的规则集。这意味着您可以在需要时忽略您想要的内容。

奖金,它是免费的!

答案 1 :(得分:6)

我在自己的类似案例中所做的是使用sql prettifier,它将以非常相似的方式自动组织两组半完全不同的SQL。然后我粘贴并将结果与​​WinMerge进行比较。

这是一个两步过程,但它比许多其他选项更加可口,特别是涉及到许多代码行时。

Link to web-based Sql Pretty printer这很不错。

答案 2 :(得分:3)

Compare++是一个选项,您可以在“智能”菜单中尝试“忽略代码样式更改”。它支持许多语言的结构化比较,例如C / C ++,JavaScript,C#,Java,......

答案 3 :(得分:2)

您可以使用Eclipse IDE的DTP(数据工具项目)。

为了展示它,我创建了两个几乎相同的SQL文件,让eclipse向我展示差异。点击“show next”后我拍了一张截图。

正如您所看到的,它仍然突出显示新行,但按照它的方式,您可以立即看到它们不包含对SQL的实质性更改。很容易发现我将ID从1改为2的位置。

这是结果。

alt text alt text alt text

答案 4 :(得分:2)

无论您对“免费”(啤酒与言论/自由)的定义如何,Poor Man's T-SQL Formatter也可以通过WinMerge(使用winmerge插件)或Beyond Compare以及其他允许的比较工具来实现。命令行预格式化,使用命令行批量格式化程序。

如果你喜欢在没有下载任何东西的情况下进行旋转,它可以立即在线使用(比如非自由对应的T-SQL Tidy,Instant SQL Formatter等):

http://poorsql.com

答案 5 :(得分:1)

我爱Araxis合并。不是免费的,但非常值得。除其他外,它可以忽略任何类型的空白。

答案 6 :(得分:1)

另一个选择是Emacs的Ediff。如果你不害怕Emacs,那就行得很好。

答案 7 :(得分:0)

如果您使用的是Windows,WinMerge非常流畅。在Linux(可能是OS X)下,有Meld

两者都像啤酒一样免费且工作得很好。不像Araxis那么酷,但我们不希望你在桌上流口水。

两者都是具有空白忽略等功能的通用差异工具。我并不完全确定他们会忽略空白行,但他们可能会很好。

答案 8 :(得分:0)

我们的SD Smart Differencer根据其精确的语法语法和结构比较两个源程序,而不是根据原始文本。它通过解析(SQL)源来实现 编译器的方式,并比较相应的编译器数据结构(例如,抽象语法树)。因此,SmartDifference不关心换行符,空格或插入评论。

它报告差异,而不是换行符,而是报告编程语言结构(变量,表达式,语句,块,函数......)以及接近程序员意图(删除,插入,移动) ,复制,重命名)而不是行插入或行删除。

SQL(与许多其他计算机语言名称一样)是一系列计算机语言的名称,它们的语法相似但细节不同。因此,对于智能差异器,您使用的 方言SQL。我们有PLSQL和SQL2011的SQL前端(因此是SmartDifferncers)。如果SQL保持在其中任何一个的范围内,Smart Differencer可以为您工作;如果你使用额外的SQL Server或Postgres,SmartDifferencer目前无法帮助你。 [我们开发语言解析器作为我们业务的一部分,所以我希望这是一个延迟而非永远的问题。)

虽然OP在细节上询问SQL,但他的标题问题是语言无关。 除了SQL之外,还有许多其他广泛使用的语言的SmartDifference:C,C ++,C#,Java,......

答案 9 :(得分:0)

你试过KDiff吗?我确定你可以忽略它的空白,如果它不够强大,它允许你在文件上运行预处理器。最重要的是它是免费的开源。

答案 10 :(得分:0)

PHPStorm的diff工具的“忽略空格:全部”命令可以完美地完成任务。它集成了对许多VCS的支持,如SVN,git等。以及集成的SQL支持!

不是免费的,但时间也不是免费的。想浪费时间去做这件事吗?前进。

我仍然无法相信它是2014年,这不是所有差异工具的标准功能!!

顺便说一下,我相信WebStorm的差异工具也可以运作。

答案 11 :(得分:0)

您可以使用命令行工具wdiff忽略换行符。 wdiff是一个GNU工具,用于逐个字地比较文件。它可以使用-n选项忽略换行符。

假设我将您的2个示例文件放入ex1.txt和ex2.txt。然后我们可以运行:

$> wdiff -n ex1.txt ex2.txt
the
quick
brown

输出实际上是第一个文件的内容。请注意,没有+或 - 符号,这意味着文件具有相同的字符串。

如果我添加了"狐狸"到ex1.txt的末尾,输出看起来像这样:

the
quick
brown [-fox-]

如果看到常见字词仍然困扰您,您可以添加-3--no-common。以下是我添加" fox"的例子。到第一个文件:

$> wdiff -n -3 /tmp/ex1.txt /tmp/ex2.txt

======================================================================
 [-fox-]
======================================================================