--- /dev/null
+#!/bin/sh
+
+. "$(git --exec-path)/git-sh-setup"
+cd_to_toplevel # for the tar below
+
+pre="${1-HEAD}"
+post="$2"
+
+tmp="$(mktemp -d)"
+
+cleanup () {
+ rm -rf $tmp
+}
+
+trap cleanup EXIT
+
+mkdir "$tmp"/a "$tmp"/b
+
+if [ -n "$post" ]; then
+ git diff --name-only "$pre" "$post" > "$tmp"/filelist
+ while read name; do
+ mkdir -p "$tmp"/b/"$(dirname "$name")"
+ git show "$post":"$name" > "$tmp"/b/"$name"
+ done < "$tmp"/filelist
+else
+ git diff --name-only "$pre" > "$tmp"/filelist
+ tar -c -T "$tmp"/filelist | (cd "$tmp"/b && tar -x)
+fi
+
+while read name; do
+ mkdir -p "$tmp"/a/"$(dirname "$name")"
+ git show "$pre":"$name" > "$tmp"/a/"$name"
+done < "$tmp"/filelist
+
+cd "$tmp"
+#meld a b
+#diff -ur a b
+kdiff3 a b
--- /dev/null
+.\"
+.TH "git-diffall"
+.SH NAME
+git-diffall \- Use a visual diff tool to show all differences
+
+.SH SYNOPSIS
+\fBgit-diffall\fR [\fIPRE\fR] [\fIPOST\fR]
+
+.SH "DESCRIPTION"
+
+.PP
+\fBgit-diffall\fR performs a visual diff using kdiff3 between PRE and POST
+of the current project. No arguments will show the differences between the
+working directory and HEAD. Later this tool can be improved upon to use the
+tool listed in the config file (difftool), or if none present fall back to
+a 'normal' git diff.
+
+Thanks to Thomas Rast for publishing this script online:
+http://thread.gmane.org/gmane.comp.version-control.git/124807
+
+.SH "SEE ALSO"
+git-diff(1)