git diff - 处理长线?

问题描述 投票:223回答:16

我在一个文件上运行git-diff,但更改是在一个长行的末尾。

如果我使用光标键向右移动它会丢失颜色编码,更糟糕的是线条不会排列,这使得跟踪更改变得更加困难。

有没有办法防止这个问题,或者只是简单地换行?

(通过mingw32运行git 1.5.5)

git diff textwrapping
16个回答
113
投票

git diff输出的显示由您正在使用的任何寻呼机处理。

通常,在Linux下,将使用less

您可以通过设置GIT_PAGER环境变量来告诉git使用不同的寻呼机。如果您不介意分页(例如,您的终端允许您向后滚动),您可以尝试将GIT_PAGER显式设置为空以使用寻呼机来停止它。在Linux下:

$ GIT_PAGER='' git diff

如果没有寻呼机,线条将会换行。

如果您的终端不支持彩色输出,您也可以使用--no-color参数关闭它,或者在git配置文件的颜色部分输入一个条目。

$ GIT_PAGER='' git diff --no-color

3
投票

你可以简单地将git diff的输出传递给更多:

git diff | more

3
投票

不是一个完美的解决方案,但gitkgit-gui都可以显示这些信息,并有滚动条。


3
投票

当您使用“git diff”并显示多个页面时(在页面末尾看到“:”),在这种情况下,您可以键入“-S”并按Enter键。(S应为大写)。它会切换折叠长线。


2
投票

到目前为止没有人指出这一点。它很容易记住,并且不需要在git配置中进行额外的配置

git diff --color | less -R

1
投票

列出当前/默认配置:

  $ git config --global core.pager  
    less -FXRS -x2

然后更新并省略-S之类:

  $ git config --global core.pager 'less -FXR -x2'

-S:使长于屏幕宽度的行被切断而不是折叠。


-1
投票

遇到麻烦时,我经常使用DiffMerge。出色的差异工具,具有内嵌差异突出显示功能。此外,在最新版本中,他们添加了一种具有水平模式的模式。

但是,我无法配置git来使用它。因此,我必须首先获取文件的两个版本。


-1
投票

简单的方法,在我的情况下,我使用Linux操作系统

git diff > text.txt

这个命令行创建并将git diff输出放在text.txt中,然后你可以用另一个文本编辑器打开它,例如sublime文本。

sublime text.txt

希望它对你有所帮助。

不要忘记之后删除它。 = 0)


224
投票

或者,如果您使用less作为默认寻呼机,只需键入-S,同时查看差异以重新启用包装。


113
投票

您也可以使用git config设置寻呼机进行换行。

$ git config core.pager 'less -r' 

设置当前项目的寻呼机设置。

$ git config --global core.pager 'less -r' 

为所有项目全局设置寻呼机


39
投票

Josh Diehla comment充分归功于this answer,我觉得这应该是一个自己的答案,所以补充一下:

处理长线差异的一种方法是使用面向字的差异。这可以通过以下方式完成:

git diff --word-diff

在这种情况下,您将获得一个显着不同的差异输出,它会明确显示一行中已更改的内容。

例如,而不是得到这样的东西:

diff --git a/test-file.txt b/test-file.txt
index 19e6adf..eb6bb81 100644
--- a/test-file.txt
+++ b/test-file.txt
@@ -1 +1 @@
-this is a short line
+this is a slightly longer line

你可能得到这样的东西:

diff --git a/test-file.txt b/test-file.txt
index 19e6adf..eb6bb81 100644
--- a/test-file.txt
+++ b/test-file.txt
@@ -1 +1 @@
this is a [-short-]{+slightly longer+} line

或者,使用着色,而不是:

你可能会得到这个:

现在,如果你要比较一个非常长的行,你可能仍然会遇到你最初描述的寻呼机情况的问题,并且在其他答案中已经解决了,显然是满意的。希望这会为您提供一个新工具,以便更轻松地识别线路上的变化。


29
投票

要使用less作为寻呼机并使换行永久化,您只需启用fold-long-lines选项:

git config --global core.pager 'less -+S'

这样您就不必在使用less时键入它。

干杯


19
投票

只是用Google搜索了这个。 GIT_PAGER='less -r'为我工作


18
投票

Mac OSX:没有其他答案,除了某人45的'-S',而较少的运行对我有用。它采用以下方法使word-wrap持久化:

git config --global core.pager 'less -+$LESS -FRX'

10
投票

自Git 1.5.3(Sep 2007

一个--no-pager选项已经可用。

git --no-pager diff

How do I prevent git diff from using a pager?

Example

从v2.1开始,wrap是默认值

Git v2.1 Release Notes


5
投票

八年后,我从https://superuser.com/questions/777617/line-wrapping-less-in-os-x-specifically-for-use-with-git-diff找到了一个更好的答案:

git config core.pager `fold -w 80 | less`

现在你通过fold管道git diff,首先,然后更少:包装,更少的页面高度是正确的,保持语法高亮。

© www.soinside.com 2019 - 2024. All rights reserved.