git提示#1:使用git diff耐心

  git config --global diff.algorithm耐心 

在大多数情况下,这足以简化阅读算法和精神压力,但也有更高级的智能差异工具

AST意识差异

语义源代码diff aka结构比较工具了解语言的AST:

  • 简单的json差异:json-diff
  • 简单的html差异:html-differ
  • 简单的Perl单词diff:diff-so-fancy
  • 高级C / C ++ / C#/ Java语义差异

当您想要1)读取长差异,2)执行具有冲突的复杂合并,3)只想忽略标点符号(,;)和间距时,可能需要AST差异。

基于AST的diff首先保持语法边界,并且可以同时按行和按字工作。

一些梦想

  • 模式挖掘差异(“我重命名了模块A的方法s / foo / bar /,因此在我将当前提交重新设置基准时应用此重命名补丁”)
  • 阻止移动差异(“功能移至文件中的另一个位置或另一个文件;使用箭头将这些位置连接”)

除了耐心以外

  1. JetBrains Idea(例如Webstorm)差异是我什至知道的视觉差异的最佳工具。 对于复杂的合并操作,它最有用:
  • 3窗格视图:A您的更改,C冲突的更改,B基本更改
  • A / B,A / C,并排
  • 忽略间距
  • 受控的自动应用无冲突更改

2.合并vim中的三基比较:

  git config --global merge.conflictstyle diff3 

3. 有用的git-merge和git-rebase选项:

git rebase -s recursive -Xpatience -Xignore-space-change -Xfind-renames -Xrename-threshold=40%

中级AST差异工具

只是使用AST来美化代码,与使用unix diff类的旧工具比较纯文本文件相比,有种不同:

  • astii-JavaScript AST感知的差异和补丁工具集

阅读更多

  • prettier-diff —语义JavaScript / JSON差异的git diff包装器
  • 语义合并-高级c / c ++ / c#/ java语义差异
  • https://stackoverflow.com/questions/523307/semantic-diff-utilities
  • 语义源代码差异搜索
  • 语义差异github搜索
  • json diff在线:www.jsondiff.com(github回购)
  • 几乎所有语言的语义在线存在差异:prettydiff.com(repo)
  • 一些论文:[1] symdiff,[2] tree-differencing,[3] prettydiff,[4] 2002年的概述
  • jsondiffpatch-区分和修补JavaScript对象(例如json-diff,但用于js)