【问题标题】:command line recursive word-based diff?命令行递归基于单词的差异?
【发布时间】:2011-06-26 06:52:34
【问题描述】:

是否有一个命令行程序可以提供基于单词的递归差异(在 2 个目录上)?

diff -u 是递归的,但它不会逐字比较。 wdiffdwdiff 执行基于单词的差异,但没有用于递归差异的内置选项。

我想将结果通过管道传递给colordiff,因此生成colordiff 理解的输出的程序将特别有用。有什么建议?谢谢!

抄送

【问题讨论】:

  • 这并不能真正回答您的问题(因此作为评论发布),但如果您使用的是带有 GUI 的系统,那么使用 GUI diff 程序可能会更容易。我觉得 meld (meld.sourceforge.net) 相当不错。

标签: word-diff


【解决方案1】:

Git 可以做到并输出颜色:

以下通常有效:

git diff --color-words path1 path2

但一般情况下您可能需要这样做

git diff --no-index --color-words path1 path2

这两个文件甚至都不需要在 git 存储库中!

--no-index 如果您和路径位于 git 工作树中,则需要。如果您或其中一个文件位于 git 工作树之外,则可以省略它。

手册页:https://git-scm.com/docs/git-diff/1.8.5(以及更高版本...)

git diff --no-index [--options] [--] […​]

此表格用于比较文件系统上给定的两个路径。你可以 在工作树中运行命令时省略 --no-index 选项 由 Git 和至少一个路径点控制在 工作树,或在工作树外运行命令时 由 Git 控制。

【讨论】:

  • +1 - 我从来不知道你可以在 repo 之外的文件上使用 git diff。谢谢。
  • 如果两个输入都是文件,那是个好主意,但是如果一个输入是命令的输出呢? - 不被接受为使用标准输入的指令。我尝试了 Bash 进程替换(git diff --no-index -- <(echo foo quux baz) somefile),但显然git-diff-file 不是从命名管道中读取,而是将“内容”打印为pipe:[3377923] 或类似名称。
  • @cjs 如果您的命令将文件作为输入,您可以使用 textconv。例如,我想运行git diff ... <(gzip -dc foo.gz) <(gzip -dc bar.gz)。我可以通过将 *.gz diff=gz 添加到 .gitattributes、将 [diff "gz"] ` textconv=gzip -dc` 添加到 .gitconfig 并运行 git diff --textconv ... foo.gz bar.gz 来实现这一点
猜你喜欢
  • 2023-03-06
  • 1970-01-01
  • 2010-10-16
  • 1970-01-01
  • 2017-05-02
  • 2013-10-06
  • 1970-01-01
  • 2015-04-16
  • 1970-01-01
相关资源
最近更新 更多