x-cmd pkg | difft - 基于代码语法的结构化比较工具
·
简介
difft(Difftastic) 是一个根据文件语法进行差异分析的结构化比较工具。
Difft 的原理是使用 Tree-sitter 来构建解析树,然后将解析树转换为一个更简单的树,可以进行差异比较。这里简单了解一下 Tree-sitter: 它是一个用于解析源代码的现代解析器生成工具和库,它可以将源代码解析为抽象语法树(AST),使程序能够理解和处理源代码的结构和语法。
首次用户
-
使用
x difft
即可自动下载并使用 -
x-cmd 提供1分钟教程,其中包含了 difft 命令常用功能的 demo 示例,可以帮你快速上手 difft 。
-
使用案例:
# 比较两个目录的差异 $ x difft path/dir_1 path/dir_2 # 比较两个文件的差异 $ x difft path/file_1 path/file_2 # 使用 difft 比较 git 的提交日志 $ GIT_EXTERNAL_DIFF=difft git log -p --ext-diff
更精准的语法高亮
- difft 可以根据文件的语法比较文件的不同之处并进行高亮显示,但如果一个文件的扩展名不能识别的话,difft 使用的是带有单词高亮的文本差异比较。若要查看 difft 支持哪些语言,可以点击这个链接查看 difft语言支持
- 支持仅检查两个文件是否具有相同的语法结构,而不进行差异计算
支持在 git 命令中使用 difft 来比较
- 当前环境使用: 可以通过设置环境变量 GIT_EXTERNAL_DIFF (
GIT_EXTERNAL_DIFF=difft git diff
)然后在当前环境使用 git diff 即可 - 全局配置: 如果您想默认使用 difftastic,可以使用 git config 进行配置。具体操作方式可以在这里查看
除 git 以外,difft 还支持 Mercurial 和 Fossil(Mercurial 和 Fossil 都是版本控制系统)
已知问题
- difft 在比较大文件上的性能较差,并且有可能会占用大量的内存,详情请看这里。
竞品和相关作品
以下 cli 项目也是基于树进行结构差异分析:
- json-diff 比较 JSON 文件的结构 diff
- GumTree 解析多种编程语言,然后执行基于树的 diff,输出 HTML 显示。
- Diffsitter 一个基于树的比较工具。
- Autochrome 是一个用于在结构上比较和突出显示 clojure 源代码的程序。
- graphtage 通过解析为通用文件格式,然后显示差异来比较结构化数据,允许将 JSON 与 YAML 进行差异。
进一步阅读
- 项目托管在 GitHub 上,里面的 README 文档提供了详细的参数功能和使用说明。
- 官方提供了详细的 manual 文档,该文档对 difft 的解析进行了详尽的说明。
- 如果你是 magit 用户,你可以参考 difftastic-diffing-with-magit,将 difftastic 与 magit 一起使用。
更多推荐
已为社区贡献9条内容
所有评论(0)