Open Source project Trac has an excellent diff highlighter — it highlight changed lines and changed bytes in each changed line! See https://trac.transmissionbt.com/changeset/12148 or http://trac.gajim.org/changeset/297ad7711d20bfee1491768640d9bc5384464363 for examples.
Is there way to use the same color highlight (i.e. changed lines and changed bytes too) in bash terminal, git or vim for diff output (patch-file)?
I use
--color-words
option and it works fine for me :Diffy
GitLab is using Diffy https://github.com/samg/diffy (Ruby) to achieve output similar to GitHub and diff-highlight:
Diffy makes the diff itself using the same algorithm ad Git, and supports different types of outputs, including the HTML output that GitLab uses:
Output:
Note how
strong
was added to the changed bytes.Emacs has the ediff-patch-buffer function which should fulfill your needs.
Open the un-patched file in emacs type ESC-x, ediff-patch-buffer.
Follow the prompts and you should see a highlighted comparison of the patched and original versions of your file.
As per your comment the following will will give you a bash solution requiring only dwdiff:
This is much simpler in 2019
Byte-based diffs are now distributed with official
git
. You just have to locate where it is installed on your machine and enable it.First: add
diff-highlight
to your pathSecond: Enable in your Git config
If you're not on macOS or didn't install git via brew then set
GIT_HOME
to git's base install directory on your machine before running.Windows
Git is likely installed in a user-specific directory. Open a git shell and run this to find where it is:
Then use the path from that command as your
GIT_HOME
. See here for alternative methods of finding Git's install directory on Windows.I have not personally verified this on Windows, but it should work
Linux
Nerd. If you don't already know where git is installed is then
ll $(which git)
orlocate git
should help.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
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 adoc
folder). If it isn't there on your system try usinglocate diff-highlight
to find it. Note that the highlighting script is not executable (at least on my machine), hence the requirement forperl
.To always use the highlighter for the various diff-like commands just add the following to your
~/.gitconfig
file: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.