代码之家  ›  专栏  ›  技术社区  ›  Aleksandr Levchuk Wes

对于“gitdiff”,是否有-U<infinity>选项来显示整个文件?

git
  •  18
  • Aleksandr Levchuk Wes  · 技术社区  · 10 年前

    我需要以编程方式为web ui生成一个完整的上下文gitdiff。

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

    普遍的答案是 git diff -U99999

    用一个 -U / --unified 选项具有极高的阈值(例如999999) git diff -U999999 :

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

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

    2 回复  |  直到 8 年前
        1
  •  9
  •   Kevin Reid    10 年前

    如果你只是用一个大数字 -U ,您可以选择大的数字作为 您的应用程序 无法处理显示如此大的文件(diff)。

    如果我的文件大于1M行,这是一个正确性问题

    为了解决这个问题,您可以检查多个输出 @@ ... @@ 行来确定它是否完整,这允许您避免默默地给出错误的数字。

        2
  •  1
  •   kdopen    10 年前

    坦率地说,最好的选择是使用 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差异工具 采用与相同的参数 差异比较 加上一些来帮助这个过程(我发现 -y 用于防止从一个文件移动到下一个文件时出现提示)。

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

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

    明显替代 08f0f82 具有正确的SHA-1。

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

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

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

    显然,这是用于交互的,而不是用于脚本