对于&#34; git diff&#34;是否有一个-U <infinity>选项来显示整个文件?</infinity>

时间:2015-02-25 19:00:49

标签: git

我需要以编程方式为web ui生成完整上下文git diff。

用于生成完整上下文差异的CLI包含在问题中:

流行的答案类似于git diff -U99999

-U / --unified选项的阈值非常高(例如999,999),执行git diff -U999999

  1. 让我怀疑可能会有性能损失
  2. 更糟糕的是,如果我的文件大于1M行
  3. ,这是正确性问题

    是否有-U选项显示整个文件?

2 个答案:

答案 0 :(得分:4)

如果您只使用-U的大号,您可以选择较大的数字作为您的应用程序无法处理显示如此大的文件(diff)的点

  

如果我的文件大于1M行

,这是正确性问题

要解决此问题,您可以检查多个@@ ... @@行的输出,以确定它是否完整 - 这样可以避免无声地给出错误的数字。

答案 1 :(得分:1)

坦率地说,最好的选择是使用git difftool而不是香草git diff。要查看您的git版本支持哪些工具,请输入

git difftool --tool-help

,我的版本(2.3.0)显示以下内容

$ git difftool --tool-help
'git difftool --tool=<tool>' may be set to one of the following:
        araxis
        gvimdiff
        gvimdiff2
        gvimdiff3
        meld
        vimdiff
        vimdiff2
        vimdiff3

The following tools are valid, but not currently available:
        bc
        bc3
        codecompare
        deltawalker
        diffmerge
        diffuse
        ecmerge
        emerge
        kdiff3
        kompare
        opendiff
        p4merge
        tkdiff
        xxdiff

我通常使用meld,但这只是个人偏好。 git difftool使用与git diff相同的参数加上一些来帮助处理(我发现-y对于防止从一个文件移动到下一个文件时的提示非常有用。)

例如,要查看特定提交所引入的更改,您可以使用

git difftool -y -t meld 08f0f82^..08f0f82

显然用正确的SHA-1替换08f0f82

我最大的抱怨是它按顺序为每个修改过的文件启动工具(因此指定-y选项)。

如果您只想检查该提交中特定文件的更改,您只需将文件名添加到命令行即可。

git difftool -y -t meld 08f0f82^..08f0f82 myfile.c

显然,这是用于交互式使用 - 而不是用于编写脚本