Diff(差异对比)是用于比较两段文本(或两个文件)之间差异的技术。最经典的diff算法基于最长公共子序列(LCS, Longest Common Subsequence)问题,由Eugene Myers在1986年提出的改进算法至今仍被Git等工具广泛使用。
| 符号 | 含义 | 颜色(通常) |
|---|---|---|
| -(减号开头的行) | 仅在原始文本中存在(被删除) | 红色 |
| +(加号开头的行) | 仅在修改后文本中存在(新增) | 绿色 |
| (空格开头的行) | 两边相同,未修改的上下文 | 无高亮 |
| @@...@@ | 差异块的位置信息(行号范围) | 蓝色/紫色 |
最长公共子序列(LCS)算法通过动态规划找出两个序列中最长的公共子序列。Diff工具利用LCS确定哪些行是相同的(保留),哪些是新增或删除的。
| 场景 | 说明 |
|---|---|
| 代码审查(Code Review) | 查看Pull Request中代码的具体改动 |
| 版本控制 | 比较不同版本的文件差异 |
| 文档对比 | 找出合同、文章的修改之处 |
| 配置文件对比 | 比较不同环境的配置差异 |
| 数据库迁移 | 对比SQL脚本的变更 |
| 调试排错 | 比较正常输出与异常输出的差异 |