How can I use `git diff --color-words` outside a Git repository?

20,623

Solution 1

git diff --color-words --no-index old.txt new.txt

Solution 2

According to a comment from Jefromi you can just use

git diff --color-words file1 file2

outside of git repositories too.

Solution 3

Git version 1.9.1:

git diff --word-diff=color fileA fileB

Solution 4

you can say git diff --color=always --color-words, which will give you the color escape codes in the output. you are going to have some shell to interpret the color codes though …

Solution 5

If I'm inside a git repository (git v2.3.3) :

  • git diff --color-words doesn't work (no output)
  • git diff --no-index doesn't accept --color-words nor --color arguments

Using wdiff is possible, configured to use colors, rather than underlined :

wdiff -n \
  -w $'\033[30;31m' -x $'\033[0m' \
  -y $'\033[30;32m' -z $'\033[0m' \
  … | less -R

Source : https://www.gnu.org/software/wdiff/manual/html_node/wdiff-Examples.html (modified to use foreground colors rather than background colors)

Hope it helps.

Share:
20,623
Vi.
Author by

Vi.

Updated on July 05, 2022

Comments

  • Vi.
    Vi. almost 2 years

    How can I get output like in git diff --color-words, but outside Git?

    Closest thing is wdiff -t, but it underlines/inverts things instead of using green/red colours and does not allow specifying my whitespace regex.

  • Vi.
    Vi. about 13 years
    The question was about using it outside Git repository. Also it misses some things when --color-words=always instead of just --color-words.
  • Cascabel
    Cascabel about 13 years
    From the manpage: "If exactly two paths are given and at least one points outside the current repository, git diff will compare the two files / directories. This behavior can be forced by --no-index." (A lot of times you don't even need --no-index.)
  • knittl
    knittl about 13 years
    @vi: sorry, you only said »outside git«, it did not mention a repository anywhere. i thought it was about having the color in other applications beside git (when e.g. piped) – which is also »outside git«, in the sense of »not inside the default git toolchain/tool collection«
  • Manu Manjunath
    Manu Manjunath over 11 years
    git diff didn't work on two arbit files as mentioned above. (git version 1.7.4). Although,git diff --color-words --no-index <file1> <file2> works, correct approach would be to use wdiff, which is intended for that purpose (gnu.org/software/wdiff)
  • Zenexer
    Zenexer over 10 years
    @Manu No, git diff is intended for this purpose. wdiff is just a hack. Read your link sometime.
  • PhML
    PhML almost 10 years
    At least in my git 1.9.3, the order should be git diff --no-index --color-words
  • Vi.
    Vi. almost 10 years
    In my git v1.9.3 order of --no-index and --color-words does not matter... (Actually I can't find a case now where it fails without --no-index at all).
  • Vi.
    Vi. about 9 years
    Why git --no-index --color-words fails? I used it (with earlier Git versions although).
  • Penghe Geng
    Penghe Geng over 5 years
    Works great. Maybe we can add an alias alias diff="git diff --no-index"?
  • Joshua Goldberg
    Joshua Goldberg over 4 years
    git diff is excellent, but the wdiff page noted above does not say that it's a hack. wdiff "is quite mature" according to its own documentation linked from that page: gnu.org/software/wdiff/manual/wdiff.html