我应该如何使用git差异长行?

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

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

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

我通过mingw32运行Git 1.5.5。

51707 次浏览
不是一个完美的解决方案,但是gitkgit-gui都可以显示这个信息,

遇到麻烦时,我经常求助于DiffMerge。优秀的差异工具,具有inline diff高亮。此外,在最新版本中,他们还添加了一个水平模式。

不过,我还没能配置git来使用它。所以我必须先把文件的两个版本都弄出来。

git diff输出的显示由你所使用的寻呼机来处理。

通常,在Linux下,将使用less

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

$ GIT_PAGER='' git diff

如果没有寻呼机,行就会自动换行。

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

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

我在谷歌上搜了一下。GIT_PAGER='less -r'适合我

或者,如果您使用less作为默认的分页器,只需在查看差异时键入-S,以重新启用less的包装。

你也可以使用git config来设置分页器来进行换行。

$ git config core.pager 'less -r'

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

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

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

Mac OSX:除了某人45的“-S”而“less”是“running”之外,其他的答案都不适合我。要使换行持久,需要执行以下操作:

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

要使用less作为分页器并永久换行,您可以简单地启用折叠-长行选项:

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

这样你就不必在使用更少的时候打字了。

干杯

你可以简单地将git diff的输出输出到more:

git diff | more

一个评论这个答案中,完全归功于乔什·迪赫,我仍然觉得这应该是一个自己的答案,所以添加它:

处理在长行中看到差异的一种方法是使用面向单词的diff。这可以通过以下方式实现:

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

或者,用彩色代替这个:

result of just git diff

你可能会得到这个:

result of git diff——word-diff

现在,如果您正在比较一个非常长的行,您可能仍然对您最初描述的寻呼机情况有问题,并且在其他答案中已经解决了这个问题,显然令人满意。不过,希望这为您提供了一种新的工具,可以更容易地识别在线上发生了哪些更改。

从Git 1.5.3开始 (2007年9月) < / p >

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

git --no-pager diff

我如何防止git差异从使用寻呼机?< / >

使用实例

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

Git v2.1 Release Notes . sh ="http://github.com/git/git/blob/50f84e3/Documentation/RelNotes/2.1.0.txt#L30-L37

列出当前/默认配置:

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

然后更新并去掉-S,比如:

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

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

八年后,我找到了一个更好的答案,来自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差异,首先,然后less: wrapped, less page-height是正确的,保持语法高亮显示。

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

git diff --color | less -R

当你使用“git diff”,它显示了几个页面(你看到“:”在页面的末尾),在这种情况下,你可以输入“-S”并按enter。(S应为大写)。它将切换折叠长行。