The diff-highlight
Perl contrib script produces output so similar to that of the Trac screenshots that it is likely that Trac is using it:
Install with:
wget https://raw.githubusercontent.com/git/git/fd99e2bda0ca6a361ef03c04d6d7fdc7a9c40b78/contrib/diff-highlight/diff-highlight && chmod +x diff-highlight
Move the file diff-highlight
to the ~/bin/
directory (or wherever your $PATH
is), and then add the following to your ~/.gitconfig
:
[pager]
diff = diff-highlight | less
log = diff-highlight | less
show = diff-highlight | less
Single copy paste install suggested by @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
While using git diff
or git log
and possibly others, use option --word-diff=color
(there are also other modes for word diffs BTW)
diff-so-fancy
is a diff
-highlighter designed for human eyeballs.
It removes the leading +
/-
which are annoying for cut/paste and makes clear sections between files.
Coloured git
(left) vs diff-so-fancy
(right - note the character-level highlights):
If you want thediff-so-fancy
(right side) output but not constrained to files in a git
repository, add the following function to your .bashrc
to use it on any files:
dsf() { git diff --no-index --color "$@" | diff-so-fancy; }
Eg:
dsf original changed-file
Character level highlighting and standard diff
format
If you don't like the non-standard formatting of diff-so-fancy
, but still want character-level git
highlighting, use diff-highlight
which will take git
's output and produce the really pretty standard diff
-format output:
To use it by default from git
, add to your .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
The [pager]
section tells git
to pipe its already colourised output to diff-highlight
which colourises at the character level, and then pages the output in less (if required), rather than just using the default less
.
The behaviour you want is now available in git itself (as was pointed out in a comment by naught101). To enable it you need to set your pager to
perl /usr/share/doc/git/contrib/diff-highlight/diff-highlight | less
where /usr/share/doc/git/contrib/diff-highlight/diff-highlight
is the location of the highlighter script on Ubuntu 13.10 (I have no idea why it's in a doc
folder). If it isn't there on your system try using locate diff-highlight
to find it. Note that the highlighting script is not executable (at least on my machine), hence the requirement for perl
.
To always use the highlighter for the various diff-like commands just add the following to your ~/.gitconfig
file:
[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
I added this as a new answer naught101's comment is buried and because the set up is not quite as trivial as it should be and at least on the version of Ubuntu that I have the instructions in the README don't work.
A utility for byte-based diffs has been distributed with official Git since v1.7.81. You just have to locate where it is installed on your machine and enable it.
/usr/local/opt/git
cd / && pwd -W
to find the install directory.ll $(which git)
or locate git
should help.diff-highlight
to your bin directory so that your PATH can find itGIT_HOME='/usr/local/opt/git/' # Use the value from the first step.
ln -s "${GIT_HOME}/share/git-core/contrib/diff-highlight/diff-highlight" \
'/usr/local/bin/diff-highlight'
git config --global interactive.diffFilter diff-highlight # Use on interactive prompts
git config --global pager.diff "diff-highlight | less" # Use on git diff
git config --global pager.log "diff-highlight | less" # Use on git log
git config --global pager.show "diff-highlight | less" # Use on git show
1 Here is the v1.7.8 version, but lots of changes have been made since then.
I use --color-words
option and it works fine for me :
$ git diff --color-words | less -RS
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With