251

我正在对文件运行git-diff,但更改位于长行的末尾。

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

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

我正在通过 mingw32 运行 Git 1.5.5。

4

15 回答 15

236

或者,如果您使用 less 作为默认寻呼机,只需-S在查看差异时键入即可重新启用在 less 中的换行。

于 2010-06-24T06:58:19.240 回答
129

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

通常,在 Linux 下less会使用。

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

$ GIT_PAGER='' git diff

没有寻呼机,行将换行。

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

$ GIT_PAGER='' git diff --no-color
于 2008-09-30T10:43:23.783 回答
119

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

$ git config core.pager 'less -r' 

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

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

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

于 2010-09-09T04:46:21.267 回答
62

在对此答案的评论中完全归功于Josh Diehl,但我觉得这本身应该是一个答案,所以添加它:

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

git diff --word-diff

在这种情况下,您将获得显着不同的 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

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

只是 git diff 的结果

你可能会得到这个:

git diff --word-diff 的结果

现在,如果您要比较一条很长的线路,您最初描述的寻呼机情况可能仍然存在问题,并且在其他答案中显然已经解决了这一问题。不过,希望这为您提供了一个新工具,可以更轻松地识别在线上发生了哪些变化。

于 2013-10-08T16:53:51.450 回答
30

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

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

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

干杯

于 2012-09-19T17:32:54.720 回答
19

刚刚google了这个。 GIT_PAGER='less -r'为我工作

于 2009-05-21T02:32:40.993 回答
19

Mac OSX:除了someone45's '-S' while less is running 对我来说没有其他答案。使自动换行持久化需要以下操作:

git config --global core.pager 'less -+$LESS -FRX'
于 2011-05-23T21:57:52.360 回答
12

自 Git 1.5.3(2007 年 9 月

有一个--no-pager选项可用。

git --no-pager diff

如何防止 git diff 使用寻呼机?

例子

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

Git v2.1 发行说明

于 2014-05-13T23:10:55.533 回答
6

直到现在还没有人指出这一点。它很容易记住,不需要在 git config 中进行额外的配置

git diff --color | less -R
于 2016-06-30T14:18:30.940 回答
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`

现在你首先通过折叠管道 git diff,然后到 less: Wrapped,更少的页面高度是正确的,保持语法突出显示。

于 2016-02-11T23:21:05.823 回答
5

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

于 2017-03-11T20:10:17.097 回答
3

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

于 2008-09-25T21:48:28.560 回答
3

您可以简单地将 git diff 的输出通过管道传输到更多:

git diff | more
于 2013-07-11T15:07:32.183 回答
1

列出当前/默认配置:

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

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

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

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

于 2016-02-01T23:58:54.340 回答
-1

遇到麻烦时,我经常求助于 DiffMerge。具有在线差异突出显示的优秀差异工具。此外,在最新版本中,他们添加了一种具有水平模式的模式。

不过,我无法配置 git 来使用它。所以我必须先搞定这两个版本的文件。

于 2008-09-26T11:59:33.293 回答