オープン ソース プロジェクトのTracには、優れた差分ハイライターがあります。変更された行と、変更された各行の変更されたバイトが強調表示されます。例については、こちらまたはこちらを参照してください。
bash ターミナル、またはdiff 出力 (パッチファイル)で同じ色のハイライト (つまり、変更された行と変更されたバイトも) を使用する方法はありますか?git
vim
diff-highlight
Perl 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
git diff
または、場合によってはその他を使用してgit log
いる場合は、オプションを使用します--word-diff=color
(ところで、単語の差分には他のモードもあります)
diff-so-fancy
diff
人間の眼球用に設計され た蛍光ペンです。
カット/ペーストに煩わしい先頭の+
/-
を削除し、ファイル間のセクションを明確にします。
色付きgit
(左) と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-highlight
which を使用して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-highlight
less
必要な動作は 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のバージョンでは機能しないためです。
私は--color-words
オプションを使用し、それは私にとってはうまくいきます:
$ git diff --color-words | less -RS
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
ディフィー
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
変更されたバイトに がどのように追加されたかに注意してください。
はい、Vim は行内で変更されたテキストの強調表示を含めてこれを行います。ファイルを比較する方法の詳細については、 およびを
参照してください。:h diff
:h 08.7
Vim は、強調表示に非常に単純なアルゴリズムを使用します。最初に変更された文字、次に最後に変更された文字の行を検索し、それらの間のすべての文字を単純に強調表示します。
つまり、1 行に複数のハイライトを表示することはできません。Vim の多くの設計上の決定では、効率が優先されます。
vimdiff file1 file2
2 つのファイルの違いを文字単位で表示します。
vimdiff は vim に含まれる差分ツールです。(Vim は +diff オプションを指定してコンパイルされている必要があります:version
。
vim から起動することもできます。詳細:help diff
およびコマンドについては、 を参照してください。