108

オープン ソース プロジェクトのTracには、優れた差分ハイライターがあります。変更された行と、変更された各行の変更されたバイトが強調表示されます。例については、こちらまたはこちらを参照してください。

bash ターミナル、またはdiff 出力 (パッチファイル)で同じ色のハイライト (つまり、変更された行と変更されたバイトも) を使用する方法はありますか?gitvim

4

12 に答える 12

76

diff-highlightPerl contrib スクリプトは、Trac のスクリーンショットと非常によく似た出力を生成するため、Trac がそれを使用している可能性があります。

ここに画像の説明を入力

インストール:

wget https://raw.githubusercontent.com/git/git/fd99e2bda0ca6a361ef03c04d6d7fdc7a9c40b78/contrib/diff-highlight/diff-highlight && chmod +x diff-highlight

ファイルdiff-highlight~/bin/ディレクトリ (またはあなたの場所$PATH) に移動し、次を に追加します~/.gitconfig

[pager]
        diff = diff-highlight | less
        log = diff-highlight | less
        show = diff-highlight | less

@cirosantilli によって提案されたシングル コピー ペースト インストール:

cd ~/bin
curl -O https://raw.githubusercontent.com/git/git/fd99e2bda0ca6a361ef03c04d6d7fdc7a9c40b78/contrib/diff-highlight/diff-highlight
chmod +x diff-highlight
git config --global pager.log 'diff-highlight | less'
git config --global pager.show 'diff-highlight | less'
git config --global pager.diff 'diff-highlight | less'
git config --global interactive.diffFilter diff-highlight
于 2013-03-01T02:06:40.653 に答える
50

git diffまたは、場合によってはその他を使用してgit logいる場合は、オプションを使用します--word-diff=color(ところで、単語の差分には他のモードもあります)

于 2011-03-20T20:01:08.340 に答える
23

diff-so-fancydiff人間の眼球用に設計され た蛍光ペンです。

カット/ペーストに煩わしい先頭の+/-を削除し、ファイル間のセクションを明確にします。

色付きgit(左) とdiff-so-fancy(右 - キャラクター レベルのハイライトに注意):

diff-so-fancy 出力

diff-so-fancy(右側の) 出力が必要であるが、gitリポジトリ内のファイルに制限されていない場合は、次の関数を追加し.bashrcて、任意のファイルで使用します。

dsf() { git diff --no-index --color "$@" | diff-so-fancy; }

例えば:

dsf original changed-file

文字レベルのハイライトと標準diffフォーマット

の非標準フォーマットが気に入らないがdiff-so-fancy、それでも文字レベルのgit強調表示が必要な場合は、 diff-highlightwhich を使用してgitの出力を取得し、非常に標準的なフォーマット出力を生成しdiffます。

差分ハイライトのスクリーンショット

からデフォルトで使用するには、以下gitを に追加します.gitconfig

[color "diff-highlight"]
  oldNormal = red bold
  oldHighlight = red bold 52
  newNormal = green bold
  newHighlight = green bold 22

[pager]
  diff = diff-highlight | less -FRXsu --tabs=4

この[pager]セクションは、デフォルトgitの.diff-highlightless

于 2016-09-15T06:16:02.983 に答える
16

必要な動作は git 自体で利用できるようになりました (naught101 のコメントで指摘されているように)。有効にするには、ページャーを次のように設定する必要があります

perl /usr/share/doc/git/contrib/diff-highlight/diff-highlight | less

Ubuntu 13.10 の蛍光ペン スクリプトの場所はどこですか (フォルダー/usr/share/doc/git/contrib/diff-highlight/diff-highlightにある理由がわかりません)。docシステムに存在しない場合は、 を使用locate diff-highlightして検索してみてください。強調表示スクリプトは実行可能ではないことに注意してください (少なくとも私のマシンでは) perl

さまざまな diff のようなコマンドに常にハイライターを使用するには、次を~/.gitconfigファイルに追加するだけです。

[pager]
    log = perl /usr/share/doc/git/contrib/diff-highlight/diff-highlight | less
    show = perl /usr/share/doc/git/contrib/diff-highlight/diff-highlight | less
    diff = perl /usr/share/doc/git/contrib/diff-highlight/diff-highlight | less

naught101のコメントが埋もれている新しい回答としてこれを追加しました。セットアップは本来あるべきほど簡単ではなく、少なくともREADMEの指示があるUbuntuのバージョンでは機能しないためです。

于 2014-09-15T15:46:21.397 に答える
13

私は--color-wordsオプションを使用し、それは私にとってはうまくいきます:

$ git diff --color-words | less -RS
于 2011-05-11T10:49:23.303 に答える
1

Emacsにはあなたのニーズを満たすべきediff-patch-buffer関数があります。

パッチが適用されていないファイルをemacsタイプESC-x、ediff-patch-bufferで開きます。

プロンプトに従うと、パッチが適用されたバージョンと元のバージョンのファイルの比較が強調表示されます。

あなたのコメントによると、以下はあなたにdwdiffだけを必要とするbashソリューションを与えるでしょう:

#!/bin/bash
paste -d'\n' <(dwdiff -2 -L -c <(cat $2) <(patch $2 -i $1 -o -)) <(dwdiff -1 -L -c <(cat $2) <(patch $2 -i $1 -o -))| uniq
于 2011-03-20T23:29:14.603 に答える
1

ディフィー

GitLab は Diffy https://github.com/samg/diffy (Ruby) を使用して、GitHub および diff-highlight と同様の出力を実現しています。

ここに画像の説明を入力

Diffy は、Git と同じアルゴリズムを使用して diff 自体を作成し、GitLab が使用する HTML 出力を含むさまざまなタイプの出力をサポートします。

gem install diffy
echo '
  require "diffy"    
  puts Diffy::Diff.new("a b c\n", "a B c\n").to_s(:html)
' | ruby

出力:

<div class="diff">
  <ul>
    <li class="del"><del>a <strong>b</strong> c</del></li>
    <li class="ins"><ins>a <strong>B</strong> c</ins></li>
  </ul>
</div>

strong変更されたバイトに がどのように追加されたかに注意してください。

于 2014-07-19T07:50:58.083 に答える
0

はい、Vim は行内で変更されたテキストの強調表示を含めてこれを行います。ファイルを比較する方法の詳細については、 およびを
参照してください。:h diff:h 08.7

Vim は、強調表示に非常に単純なアルゴリズムを使用します。最初に変更された文字、次に最後に変更された文字の行を検索し、それらの間のすべての文字を単純に強調表示します。
つまり、1 行に複数のハイライトを表示することはできません。Vim の多くの設計上の決定では、効率が優先されます。

于 2011-03-16T13:58:03.533 に答える
0

vimdiff file1 file22 つのファイルの違いを文字単位で表示します。

vimdiff は vim に含まれる差分ツールです。(Vim は +diff オプションを指定してコンパイルされている必要があります:version

vim から起動することもできます。詳細:help diffおよびコマンドについては、 を参照してください。

于 2011-03-16T13:58:14.607 に答える