How to get diff working like git-diff?
Solution 1:
This will do the +/-
rather than <
and >
.
diff -u file1 file2
Since GNU diffutils 3.4 the flag --color
has been added. Combining both makes the following:
diff --color -u file1 file2
The flag --color
also takes an argument, valid options are never
, always
, or auto
. Useful when you want to be more explicit on what needs to be done.
Solution 2:
You can also use git diff --no-index -- A B
(via manpage).
Solution 3:
Install colordiff.
-
Update your ~/.colordiffrc (copying /etc/colordiffrc first, if necessary):
# be more git-like: plain=off newtext=darkgreen oldtext=darkred diffstuff=darkcyan
Use
colordiff -u file1 file2
for two files orcolordiff -ruN path1 path2
for recursively comparing paths.
It's not exactly the same, but it's very close.
Solution 4:
This is what I suggest and it's pretty close
diff -u FILE1 FILE2 | colordiff | less -R
-
colordiff
: You'll have to install this-
brew install colordiff
on my Mac. -
port install colordiff
on some Macs. -
sudo apt-get install colordiff
on Debian or Ubuntu - For other platforms, download the source from the main page or GitHub and follow the installation instructions
-
-
-R
: this tells Less to show colors instead of the raw codes.
I ultimately used -w
because I didn't want to see whitespace diffs.
diff -w -u FILE1 FILE2 | colordiff | less -R
Edit: As suggested by @Ciprian Tomoiaga in the comment, you can make this a function and put it in your ~/.bashrc
file too.
function gdiff () { diff -u $@ | colordiff | less -R; }
Solution 5:
GNU diff
has a --color
option since version 3.4 in late 2016 according to this answer on the Unix SE. That alongside -u
should be enough to mimic the output of git diff
:
diff -u --color=always file1 file2 | less -r
--color
must be always
when used in a pipe, auto
will turn off color in pipes.
I've only tried this with Git Bash on Windows, where less -R
would only color the first line of a hunk. less -r
fixed it for me in that case.