Git
Difftastic can be used an external diff command in git, allowing difftastic to be used with any git subcommand.
Warning: git v2.43.1 and earlier can crash when using an external diff and file permissions have changed.
If you can't upgrade git, use the difftool
configuration described
below.
One-Off Usage
You can set the diff.external
configuration option when running git diff
, or set the
GIT_EXTERNAL_DIFF
environment variable.
View uncommitted changes with difftastic:
$ git -c diff.external=difft diff
Other git commands also require the --ext-diff
argument in order to
use diff.external
.
View changes from the most recent commit with difftastic:
$ git -c diff.external=difft show --ext-diff
View changes from recent commits on the current branch with difftastic:
$ git -c diff.external=difft log -p --ext-diff
Regular Usage
If you like difftastic, we recommend that you configure git aliases so you can use difftastic more easily.
[alias]
# Difftastic aliases, so `git dlog` is `git log` with difftastic and so on.
dlog = -c diff.external=difft log --ext-diff
dshow = -c diff.external=difft show --ext-diff
ddiff = -c diff.external=difft diff
The author likes the following additional aliases to reduce typing:
[alias]
# `git log` with patches shown with difftastic.
dl = -c diff.external=difft log -p --ext-diff
# Show the most recent commit with difftastic.
ds = -c diff.external=difft show --ext-diff
# `git diff` with difftastic.
dft = -c diff.external=difft diff
Difftastic By Default
If you want to use difftastic as your default diff tool, add the
following to your ~/.gitconfig
.
[diff]
external = difft
This changes git diff
to use difftastic, and other commands now only
require --ext-diff
.
$ git diff
$ git show --ext-diff
$ git log -p --ext-diff
If you've configured difftastic as the default diff tool, you can
opt-out for an individual command with --no-ext-diff
.
$ git diff --no-ext-diff
Difftool
Git also has a difftool feature which allows users to invoke CLI or GUI comparison tools.
For best results, we recommend using -c diff.external=difft
as
described above. Git passes more information to the external diff,
including file permission changes and rename information, so
difftastic can show more information.
To define a difftool named difftastic
, add the following to your
~/.gitconfig
.
[difftool "difftastic"]
# See `man git-difftool` for a description of MERGED, LOCAL and REMOTE.
cmd = difft "$MERGED" "$LOCAL" "abcdef1" "100644" "$REMOTE" "abcdef2" "100644"
You can now use difftastic as a difftool:
$ git difftool -t difftastic
For the best results when using difftastic as a difftool, we recommend the following additional git configuration:
[difftool]
# Run the difftool immediately, don't ask 'are you sure' each time.
prompt = false
[pager]
# Use a pager if the difftool output is larger than one screenful,
# consistent with the behaviour of `git diff`.
difftool = true
[diff]
# Set difftastic as the default difftool, so we don't need to specify
# `-t difftastic` every time.
tool = difftastic