如何让diff像git-diff一样工作?

Mzz*_*zzz 129 git diff git-diff

我喜欢输出格式git diff.线条之间的变化的颜色和+/ -表示比GNU diff更容易阅读.

我可以git diff使用--no-indexgit repo之外的标志运行,它运行正常.但是,似乎缺少--exclude从递归中排除文件或子目录的选项diff.

有没有办法让两全其美?(GNU diff的颜色选项和+/ -格式git diff以及--exclude选项).

我已经尝试过colordiff,但我仍然喜欢它的输出格式git diff

jon*_*scb 149

我不知道如何做颜色,但这将做+/-而不是<>.

diff -u file1 file2
Run Code Online (Sandbox Code Playgroud)

  • 使用diff -u进行着色的一种简单方法是将输出传递给tig,命令行git repo viewer:`diff -u file1 file2 | tig`. (9认同)
  • 很酷,这与colordiff相结合让我足够接近我想要的东西.猜猜我下次需要在手册页下滚动...谢谢! (6认同)
  • 从apt / yum / pacman存储库中安装`colordiff`并使用它。 (2认同)
  • 除了 colordiff 之外,你还可以通过定义 cdiff() { diff -u $@ | vim` 来获取颜色。vim -R -; }`。 (2认同)

eac*_*eau 88

您也可以使用git diff --no-index -- A B(通过手册).

  • `git diff --no-index`很棒,但正如OP指出的那样,它缺少`--exclude`标志,所以它的用处通常非常有限. (3认同)
  • +1这是非常有用的,因为它展示了如何git的报告,其中两个跟踪文件A``和`B`在比较不同与*互相*代替,其中每个文件已被修改相对于他们各自的最后修订. (2认同)

Ste*_*eve 24

  1. 安装colordiff.

  2. 更新〜/ .colordiffrc(如有必要,首先复制/ etc/colordiffrc):

    # be more git-like:
    plain=off
    newtext=darkgreen
    oldtext=darkred
    diffstuff=darkcyan
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用colordiff -u file1 file2了两个文件或colordiff -ruN path1 path2用于递归比较路径.

它不完全相同,但它非常接近.


Nat*_*ate 17

这是我的建议而且非常接近

diff -u FILE1 FILE2 | colordiff | less -R
Run Code Online (Sandbox Code Playgroud)
  • colordiff:你必须安装它
    • brew install colordiff 在我的Mac上.
    • port install colordiff 在一些Mac上.
    • sudo apt-get install colordiff 在Debian或Ubuntu上
    • 对于其他平台,请从主页面GitHub下载源代码并按照安装说明进行操作
  • -R:这告诉Less显示颜色而不是原始代码.

我最终使用,-w因为我不想看到空白差异.

diff -w -u FILE1 FILE2 | colordiff | less -R
Run Code Online (Sandbox Code Playgroud)

编辑:正如@Ciprian Tomoiaga在评论中所建议的那样,你可以将它作为一个函数并将它放在你的~/.bashrc文件中.

function gdiff () { diff -u $@ | colordiff | less -R; }
Run Code Online (Sandbox Code Playgroud)

  • 要为此添加一个bash函数.bashrc:`function gdiff(){diff -u $ @ | colordiff | 少-R; } (4认同)

cod*_*rts 8

根据Unix SE 上的这个答案,GNU从 2016 年末的 3.4 版开始diff有一个--color选项。旁边应该足以模仿的输出:-ugit diff

diff -u --color=always file1 file2 | less -r

--color必须always在管道中使用时,auto将关闭管道中的颜色。

我只在 Windows 上用 Git Bash 尝试过这个,less -R它只会给大块的第一行上色。less -r在那种情况下为我修好了。