git difftool, open all diff files immediately, not in serial

Starting with git v1.7.11, you can use git difftool --dir-diff to perform a directory diff.

This feature works well with Meld 3.14.2 for example, and lets you browse all modified files:

git difftool --dir-diff --tool=meld HEAD~ HEAD

This is a handy Bash function:

git-diff-meld() (
  git difftool --dir-diff --tool=meld "${1:-HEAD~}" "${2:-HEAD}"
)

The answer that follows applies to git installations older than v1.7.11.


This same question was asked on the git mail list.

I put together a shell script based on that email thread which performs a directory diff between arbitrary commits.

Starting with git v1.7.10, the git-diffall script is included in the contrib of the standard git installation.

For versions before v1.7.10, you can install from the git-diffall project on GitHub.

Here is the project description:

The git-diffall script provides a
directory based diff mechanism for
git. The script relies on the
diff.tool configuration option to
determine what diff viewer is used.

This script is compatible with all the
forms used to specify a range of
revisions to diff:

1) git diffall: shows diff between
working tree and staged changes
2) git diffall --cached [<commit>]: shows
diff between staged changes and HEAD
(or other named commit)
3) git diffall <commit>: shows diff between
working tree and named commit
4) git diffall <commit> <commit>: show diff
between two named commits
5) git diffall <commit>..<commit>: same as
above
6) git diffall <commit>...<commit>: show the changes
on the branch containing and up to the
second , starting at a common
ancestor of both <commit>

Note: all forms take an optional path
limiter [--] [<path>]

This script is based on an example
provided by Thomas Rast on the Git
list
.

Leave a Comment