git diff - 处理长线?

Pet*_*ton 229 git diff word-wrap

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

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

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

(通过mingw32运行git 1.5.5)

小智 226

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

  • 相关提示,使用`--word-diff`查看已更改单词的颜色编码突出显示 (58认同)
  • 这只是一个注意事项,因为我看到有些人遇到了问题,-S与-s不同(请确保你遇到shift + s) (5认同)
  • 这是正确的答案,但我一直尝试将“-S”添加到命令或寻呼机核心默认值中...对于像我这样无法**阅读整个简短解决方案**的人,您**键入`-S` *查看差异时*而不是之前发出命令时** (4认同)
  • @JoshDiehl:我希望你不要介意......我认为`--word-diff` 部分应该对此有自己的答案,因为它让我觉得在帮助解决潜在问题方面做了很多工作:弄清楚长线发生了什么变化。所以,我做了一个:http://stackoverflow.com/a/19253759/313756 (2认同)

Spo*_*ser 115

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

通常,在Linux下,less将使用.

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

$ GIT_PAGER='' git diff
Run Code Online (Sandbox Code Playgroud)

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

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

$ GIT_PAGER='' git diff --no-color
Run Code Online (Sandbox Code Playgroud)


Sho*_*oan 115

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

$ git config core.pager 'less -r' 
Run Code Online (Sandbox Code Playgroud)

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

$ git config --global core.pager 'less -r' 
Run Code Online (Sandbox Code Playgroud)

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

  • 使用msysgit(1.8.1.msysgit.1)它使用双引号为我工作 - `git config --global core.pager"less -r"` (3认同)

lin*_*des 42

Josh Diehl在对这个答案的评论中给予了充分的信任,但我觉得这应该是一个自己的答案,所以补充一下:

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

git diff --word-diff
Run Code Online (Sandbox Code Playgroud)

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

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

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
Run Code Online (Sandbox Code Playgroud)

你可能得到这样的东西:

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
Run Code Online (Sandbox Code Playgroud)

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

只是<code> git diff </ code>的结果

你可能会得到这个:

<code> git diff --word-diff </ code>的结果

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

  • `--word-diff`有几个选项:`color`,`plain`和`porcelain`.此外,可以使用`--word-diff-regex`更改字边界的正则表达式.默认似乎是`\ S +`.([2.1.1](http://git-scm.com/docs/git-diff/2.1.1)) (6认同)
  • `--color-words`看起来是`--word-diff = color`的简写,当你只是查看差异而不是分享它时这很好. (3认同)
  • 我更喜欢“--word-diff=porcelain”而不是“--word-diff”,因为“porcelain”会将更改排列在单独的行上,而“--word-diff”则将更改内联。当差异很细微时,单独的线可以让您更容易地看到差异。 (2认同)

小智 29

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

git config --global core.pager 'less -+S'
Run Code Online (Sandbox Code Playgroud)

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

干杯


sin*_*ish 19

只是用Google搜索了这个. GIT_PAGER='less -r'适合我

  • 更好(对我来说):`less -R`(实际上,我使用`less -eiFRSX`,它也解决了颜色和换行问题.) (9认同)
  • less -R类似于-r,但只有ANSI"颜色"转义序列以"原始"形式输出.与-r不同,大多数情况下都能正确维护屏幕外观.(男人少) (2认同)

Joh*_*ger 19

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

git config --global core.pager 'less -+$LESS -FRX'
Run Code Online (Sandbox Code Playgroud)

  • @jakar:然后它什么也没做.在某些环境中,`$ LESS`设置为某个值(例如,通过`.login`或`.profile`或其他东西),我认为该选项只添加默认值,然后添加`-FRX`除此之外. (3认同)

小智 10

自Git 1.5.3(2007年9月)

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

git --no-pager diff
Run Code Online (Sandbox Code Playgroud)

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

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

Git v2.1发行说明


inf*_*ged 6

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

git diff --color | less -R
Run Code Online (Sandbox Code Playgroud)


Tho*_*mer 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`
Run Code Online (Sandbox Code Playgroud)

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


Ami*_*min 5

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