The default git diff behavior is to open each diff file in serial (wait for previous file to be closed before opening next file).
I'm looking for a way to open all the files at once - in BeyondCompare for example this would open all the files in tabs within the same BC window.
This would make it easier to review a complex set of changes; flick back and forwards between the diff files and ignore unimportant files.
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 andHEAD
(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.