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

5

77

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.

Yann answered 12/4, 2011 at 14:58 Comment(0)
Y
129
git diff --color-words --no-index old.txt new.txt
Yann answered 12/4, 2011 at 15:2 Comment(4)
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.)Lucero
At least in my git 1.9.3, the order should be git diff --no-index --color-wordsSpica
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).Yann
Works great. Maybe we can add an alias alias diff="git diff --no-index"?Edna
C
8

According to a comment from Jefromi you can just use

git diff --color-words file1 file2

outside of git repositories too.

Checkerwork answered 11/9, 2012 at 12:55 Comment(3)
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)Yourself
@Manu No, git diff is intended for this purpose. wdiff is just a hack. Read your link sometime.Asperse
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.htmlPostliminy
T
3

Git version 1.9.1:

git diff --word-diff=color fileA fileB

Toothache answered 2/5, 2015 at 22:55 Comment(0)
W
2

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.

Wilhelm answered 12/4, 2011 at 14:58 Comment(1)
Why git --no-index --color-words fails? I used it (with earlier Git versions although).Yann
D
1

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 …

Dragonroot answered 12/4, 2011 at 15:2 Comment(2)
The question was about using it outside Git repository. Also it misses some things when --color-words=always instead of just --color-words.Yann
@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«Dragonroot

© 2022 - 2024 — McMap. All rights reserved.