Sql 忽略换行符的Diff工具

Sql 忽略换行符的Diff工具,sql,merge,diff,newline,word-diff,Sql,Merge,Diff,Newline,Word Diff,我经常需要比较SQL过程来确定在最新版本中发生了什么变化。问题是,每个人都有自己的格式风格,SQL(通常)不关心换行符放在哪里(例如where子句都在一行上,而换行符放在每个and之前) 这使得很难(特别是对于较长的过程)看到实际的差异。我似乎找不到一个免费的diff/merge实用程序,它允许我忽略换行符(即,将其视为空白)。到目前为止,我已经尝试了WinMerge和Beyond Compare,但没有任何运气。有人知道一个diff工具(理想情况下是免费的)会将这两个示例视为相同的吗 例1:

我经常需要比较SQL过程来确定在最新版本中发生了什么变化。问题是,每个人都有自己的格式风格,SQL(通常)不关心换行符放在哪里(例如where子句都在一行上,而换行符放在每个and之前)

这使得很难(特别是对于较长的过程)看到实际的差异。我似乎找不到一个免费的diff/merge实用程序,它允许我忽略换行符(即,将其视为空白)。到目前为止,我已经尝试了WinMerge和Beyond Compare,但没有任何运气。有人知道一个diff工具(理想情况下是免费的)会将这两个示例视为相同的吗

例1:

the quick
brown
例2:

the
quick
brown

提前谢谢。

我喜欢Araxis merge。不是免费的,但很值得。除此之外,它还可以根据需要忽略任何类型的空白。

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

这是一个两步的过程,但它比许多其他选项更容易接受,特别是当涉及到许多行代码时

这很不错。

如果你是在Windows上,这是非常流畅的。在Linux(也许还有OSX)下,有很多

两者都像啤酒一样免费,而且效果很好。没有Araxis那么酷,但我们不希望你在桌子上流口水

两者都是通用的diff工具,具有空白忽略等功能。我不能绝对肯定他们会忽略空白行,但他们很有可能会忽略。

我真的很喜欢

它可以在所有平台上工作,并内置了规则集,但允许您创建和添加自己的规则集。这意味着你可以忽略你想要的,当你想要的时候

奖金,这是免费的

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

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

SQL(与许多其他计算机语言名称一样)是一系列语法相似但细节不同的计算机语言的名称。因此,对于智能差异器来说,您使用的是哪种SQL方言很重要。我们有用于PLSQL和SQL2011的SQL前端(因此是SmartDifferncer)。只要您的SQL保持在这两者的范围内,智能差分器就可以为您工作;就你使用SQL Server或Postgres的额外优势而言,SmartDifferenticer目前帮不了你。[我们开发语言解析器是我们业务的一部分,因此我认为这是一个延迟问题,而不是永远不会发生]

虽然OP在细节中询问了SQL,但他的标题问题是语言不可知论。 除了SQL太多之外,还有许多其他的广泛使用的语言:C++、C++、C语言、java……/p>< p>可以使用Eclipse IDE的DTP(Data TooProject)。 为了展示这一点,我创建了两个几乎相同的SQL文件,并让eclipse向我展示它们之间的差异。单击“显示下一步”后,我截图

正如您所看到的,它仍然突出显示了换行符,但是通过这种方式,您可以立即看到它们没有对SQL进行实质性的更改。很容易找到我将ID从1更改为2的位置

这是结果


你试过了吗?我确信你可以用它忽略空白,如果它对你来说不够强大,它允许你在文件上运行预处理器。最棒的是它是免费的、开源的。

另一种选择是Emacs的Ediff。如果您不害怕Emacs,那么它非常有用。

是一个选项,您可以在“智能”菜单中尝试“忽略代码样式更改”。它支持许多语言的结构化比较,如C/C++、JavaScript、C#、Java等,无论您对“免费”的定义如何(啤酒vs语音/libre),也可以通过WinMerge(使用WinMerge插件)或Beyond Compare和其他允许命令行预格式化的比较工具来实现,使用命令行批量格式化程序

如果您喜欢在不下载任何内容的情况下轻松使用它,那么它可以在网上立即使用(如它的非自由副本T-SQL Tidy、Instant SQL Formatter等):

PHPStorm的diff工具的“忽略空白:全部”命令可以完美地满足您的需要。它还集成了对SVN、git等许多VCS的支持,以及集成的SQL支持

不是免费的,但时间也不是免费的。想把时间浪费在辛苦的工作上吗?去吧

我仍然不敢相信这是2014年,这不是所有diff工具的标准功能


顺便说一句,我相信WebStorm的diff工具也能工作。

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

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

$> wdiff -n ex1.txt ex2.txt
the
quick
brown
输出实际上是第一个文件的内容。请注意,没有+或-符号,这意味着文件具有相同的字符串

如果我在ex1.txt的末尾添加了“fox”,那么输出将如下所示:

the
quick
brown [-fox-]
如果看到常见的单词仍然困扰着你,你可以添加
-3
--无常见的
。下面是我在第一个文件中添加“fox”的示例:

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

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

WinMerge可以忽略空行,但WinMerge不会将换行(即在不同位置)视为空白