git difftool, open all diff files immediately, not in serial
Solution 1:
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.
Solution 2:
Here's what I settled on...
Copy the following code to a file called git-diffall
(no extension):
#!/bin/sh
git diff --name-only "$@" | while read filename; do
git difftool "$@" --no-prompt "$filename" &
done
Place the file in the cmd
folder of your git install dir (eg C:\Program Files (x86)\Git\cmd
)
And use like you would git diff
:
git diffall
git diffall HEAD
git diffall --cached
git diffall rev1..rev2
etc...
Notes: The key to it is the & param which tells the external diff command to run in a background task so files are processed immediately. In the case of BeyondCompare this opens one screen with each file in its own tab.