長い行にgit diffを使用するにはどうすればよいですか?


235

ファイルに対してgit-diffを実行していますが、変更は長い行の終わりにあります。

カーソルキーを使用して右に移動すると、色分けが失われ(さらに行が整列しなくなり)、変更の追跡が難しくなります。

その問題を防ぐ方法、または単に行を折り返す方法はありますか?

私はmingw32経由でGit 1.5.5を実行しています。


6
「git diff --color-words」を試してみると、スクロールの問題は解決しませんが、単語の変更は1行のコンテキストで囲まれています。
kevinf 2014

7
「fold」の使用はかなりうまくいくようです:git diff --color-words | fold
Amy

@Amy使ってみましたfoldが、色が消えます。あなたが指定したので、--color-words私はあなたが何とか色を渡すことができたと思いますfold。どうやって?
Nero gris

回答:


120

の出力の表示は、git diff使用しているポケットベルによって処理されます。

一般的に、Linuxでは、less使用されます。

GIT_PAGER環境変数を設定することで、異なるページャーを使用するようにgitに指示できます。ページングを気にしない場合(たとえば、端末でスクロールして戻ることができる場合)、明示的GIT_PAGERに空に設定して、ポケットベルを使用してページングを停止することができます。Linuxの場合:

$ GIT_PAGER='' git diff

ページャーがなければ、行は折り返されます。

端末がカラー出力をサポートしていない場合は、--no-color引数を使用するか、git構成ファイルのカラーセクションにエントリを配置して、これをオフにすることもできます。

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

1
GIT_PAGERを空白に設定すると、行が折り返されることが確認できます。また、記号が挿入されて読みづらくなりますが、必要に応じて別のポケットベルを見つけることができるので、有効な答えです。:)ありがとう。
Peter Boughton

1
読みにくくする記号は何ですか?私もその問題を解決するために私の答えを編集できるかもしれません。
SpoonMeiser 2008

ほとんどの場合、各改行の「<-[m」(<-は単一の矢印文字でした)だけでなく、「<-[1m」や「<-[32m」のように、各色が始まると思われるマーカーも含まれます。
Peter Boughton、

1
--no-color引数は役に立ちますか?改行文字がわかりません。
SpoonMeiser 2008年

はい、ありがとうございます。これにより、すべての不要なコンテンツが表示されなくなります。そのため、改行の内容も色に関連している必要があります。
Peter Boughton、

229

または、デフォルトのポケットベルとしてlessを使用する場合は-S、差分を表示しているときに単に入力して、折り返しをlessで再度有効にします。


60
関連するヒント、--word-diff変更された単語の色分けされた強調表示を表示するために使用
Josh Diehl

5
-Sは-sとは異なります(shift + sを押していることを確認してください)
longda

2
@JoshDiehl:よろしくお願いします... --word-diff根本的な問題を解決するために多くのことをしていると私に思われるので、この部分には独自の答えがあるはずです:長い行で何が変更されたかを理解します。だから、私はそれを1
つにしました

1
注:これはOS X(mavericks)では機能しないようです。
DilithiumMatrix 2014

@zhermesマーベリックで私は418以下で動作します。-Sでなく大文字のSで入力していることを確認してください-s。Lessはと入力した後、下部に「Fold long lines(press RETURN)」というメッセージを表示し、-SReturnキーを押すと折り返しが有効になります。
Rory O'Kane 2014年

115

あなたも使うことができます git configポケットベルをラップして設定ます。

$ git config core.pager 'less -r' 

現在のプロジェクトのポケットベル設定を設定します。

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

すべてのプロジェクトのポケットベルをグローバルに設定します


3
msysgit(1.8.1.msysgit.1)では、二重引用符を使用して動作しましたgit config --global core.pager "less -r"
kerim

これにより、OS Xのgit diffで永続的にラッピングできました。ありがとうございます。
Thomson Comer 2014年

動作しますが、理由はわかりません。誰かが説明できますか?man less-rラッピングについては何も述べていません。
Ciro Santilli郝海东冠状病六四事件法轮功

@ThomsonComer '-r'は、OS Xでの制御文字の表示に関係しています...これをどのように機能させましたか?
DilithiumMatrix 2014

今ははっきり覚えていません。しかし、それ以上の説明いくつかのリンクが見つかりました:michael.otacoo.com/linux-2/avoid-escape-characters-in-git superuser.com/questions/366930/... unix.stackexchange.com/questions/19317/...を
Shoan

49

この回答のコメントの中でJosh Diehl氏の功績をたたえ、私はそれでもそれはそれ自体への回答であるべきだと感じているので、それを追加します。

長い行の違いを見るために対処する1つの方法は、単語指向の差分を使用することです。これは次のようにして行うことができます:

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

または、これの代わりにカラー化を使用します:

<code> git diff </ code>の結果

あなたはこれを得るかもしれません:

<code> git diff --word-diff </ code>の結果

さて、非常に長い行を比較している場合でも、最初に説明したページャーの状況に問題がある可能性があります。これは、他の回答で明らかに満足できるように対処されています。うまくいけば、これにより、ライン上の変更点をより簡単に特定できる新しいツールが提供されます。


6
そこのためのカップルのオプションがあります--word-diffcolorplain、とporcelain。また、単語境界の正規表現をで変更できます--word-diff-regex。デフォルトはのよう\S+です。(v2.1.1
マイケル-クレイシャーキーはどこですか

3
--color-wordsはの省略形のように見え--word-diff=colorます。これは、差分を表示するだけで、共有するのではない場合に便利です。
CivFan

ああ、これは面白いし、潜在的に非常に便利です。共有してくれてありがとう!
Darragh Enright

1
変更をインラインで配置するのに対して、変更を個別の行に並べるので、私は好き--word-diff=porcelainです。別々の行を使用すると、違いがわずかな場合に違いを簡単に確認できます。--word-diffporcelain--word-diff
wisbucky

1
LaTeXファイルの人生を変える!
6005

30

ページャーとしてlessを使用し、行の折り返しを永続的にするには、fold-long-linesオプションを有効にするだけです。

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

これにより、lessを使用しているときに入力する必要がなくなります。

乾杯


OS X 10.9.5で動作しました。ありがとう!
ジェイテイラー

Gitの差分を読んだときに、DISABLE行の折り返しにしたい場合は同様に、設定は同様である:git config --global core.pager 'less -S
トファー・ハント

19

これをググってみてください。 GIT_PAGER='less -r'私のために働く


9
さらに良い(私にとって):(less -R実際にはless -eiFRSX、色とラインラップの問題も解決するを使用しています。)
cdunn2001

2
less -Rは-rに似ていますが、ANSI "カラー"エスケープシーケンスのみが "未加工"形式で出力されます。-rとは異なり、ほとんどの場合、画面の外観は正しく維持されます。(男性以下)
リク14

19

Mac OSX:lessが実行されている間、someone45の '-S'を除いて他の答えはどれも私にとってはうまくいきませんでした。ワードラップを永続化するには、次のことが必要です。

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

これもうまくいきましたが、理由はわかりません。-+$LESSパラメータは何をしていますか?gitが定義しない限り、LESS環境変数は設定されていません。
jakar 2012

3
@jakar:それでは何もしません。一部の環境で$LESSは、が何らかの値に(たとえば、a .loginまたはa .profileまたは何かによって)設定されており、そのオプションは、デフォルトを追加してから、その上に追加するだけだと思います-FRX
naught101

これ OS X Mavericksでは動作しませんでした$LESSが、未定義です。
DilithiumMatrix 2014

naught101は正解です。+-$ LESSは、.loginまたは.profile(存在する場合)の設定を単純に含めます。私にとってはMavericksで問題なく動作していますが、問題が発生する場合は省略できます。
ジョンレンバーガー、2014

11

Git 1.5.3以降(2007年9月

--no-pagerオプションが利用可能となっています。

git --no-pager diff

git diffがポケットベルを使用しないようにするにはどうすればよいですか?

v2.1以降、ラップがデフォルトです

Git v2.1リリースノート


1
リリースノートのリンクは私を助けてくれました。git> 2で(wr)on(g)が何をしているのか知りたいだけです^^
func0der


5

「git diff」を使用していて、複数のページが表示されている場合(ページの最後に「:」が表示されます)、この場合、「-S」と入力してEnterキーを押します(Sは大文字にする必要があります)。長い行を折りたたみます。


これは、設定をいじる必要がないよりもはるかに簡単です。
chharvey

4

今まで誰もこれを指摘しなかった。覚えるのは非常に簡単で、git configで追加の構成を行う必要はありません

git diff --color | less -R

このページのすべての回答の中で最も単純なものです。私の環境-Oracle Linux 7.6。git diff --color | less -FRスクロールする必要がない小さな変更
Rakesh N

3

あなたは単にgit diffの出力をmoreにパイプすることができます:

git diff | more


1

現在/デフォルトの設定を一覧表示します。

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

次に、更新して-Sを省略します:

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

-S:画面の幅より長い行を折り返すのではなく、切り刻みます。


-1

困ったとき、私はよくDiffMergeに頼ります。インライン差分強調表示を備えた優れた差分ツール。また、最新バージョンでは、水平モードを持つモードを追加しました。

しかし、それを使用するようにgitを構成できませんでした。したがって、最初に両方のバージョンのファイルを取得するために、いじくる必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.