# [wishlist] graphical diff

11 messages from 2007-03-18 to 2007-03-19. Participants: Raimund Bauer, Robin Rosenberg, Christian MICHON, Johannes Schindelin.
Thread: https://gitlist.dev/t/7294

## Raimund Bauer, 2007-03-18 13:16

Subject: [wishlist] graphical diff
Message-ID: <1174223784.5987.6.camel@localhost>
URL: https://gitlist.dev/e/1174223784.5987.6.camel%40localhost

```
I think it would be really helpful (especially for newbies like me) to
have an option like

git diff --gui [revisions] <singe path spec>

to fire up a graphical diff viewer (similar to what git-mergetool does).

Another good place to start a graphical diff from is probably gitk from
a context-menu for the changed files in the lower right pane.

Thoughts?

-- 
best regards

  Ray

```

## Robin Rosenberg, 2007-03-18 15:06

Subject: Re: [wishlist] graphical diff
Message-ID: <200703181606.20678.robin.rosenberg.lists@dewire.com>
URL: https://gitlist.dev/e/200703181606.20678.robin.rosenberg.lists%40dewire.com
In-Reply-To: <1174223784.5987.6.camel@localhost>

```
söndag 18 mars 2007 14:16 skrev Raimund Bauer:
> I think it would be really helpful (especially for newbies like me) to
> have an option like
> 
> git diff --gui [revisions] <singe path spec>
> 
> to fire up a graphical diff viewer (similar to what git-mergetool does).
> 
> Another good place to start a graphical diff from is probably gitk from
> a context-menu for the changed files in the lower right pane.
> 
> Thoughts?
> 

Fine, except it is not likely to be my favourite gui. But you don't have to wait,
you can get a gui easily today.

Pipe the output to another tool. Kompare is such a tool which can take a patch
and compare it. It does not have to a single file. You can diff  two trees and
compare. You'll need at kdesdk version 3.5.5 (or 3.5.6)  or the patch in
http://bugs.kde.org/show_bug.cgi?id=131717 for kompare to display git diffs.

git diff HEAD^..HEAD | kompare -

As for other gui's I don't know which ones work easily out of the box. 

Eclipse will soon have recursive diff mode for git. Seems to work here, so I'll probably submit it soon). 

-- robin

```

## Christian MICHON, 2007-03-18 21:39

Subject: Re: [wishlist] graphical diff
Message-ID: <46d6db660703181439g277c2c67t22462d360cec5a7b@mail.gmail.com>
URL: https://gitlist.dev/e/46d6db660703181439g277c2c67t22462d360cec5a7b%40mail.gmail.com
In-Reply-To: <1174223784.5987.6.camel@localhost>

```
On 3/18/07, Raimund Bauer <ray007@gmx.net> wrote:
> I think it would be really helpful (especially for newbies like me) to
> have an option like
>
> git diff --gui [revisions] <singe path spec>
>
> to fire up a graphical diff viewer (similar to what git-mergetool does).
>
> Another good place to start a graphical diff from is probably gitk from
> a context-menu for the changed files in the lower right pane.
>
> Thoughts?
>

gvimdiff is pretty cool. Have a look at the archives, I asked
recently how to perform this, and a few solutions came out
(you need a sane shell, and the abilities to create fifos).

I'd use it everyday if a true vim/gvim explorer plugin would
exist (and it's hard to code!).

-- 
Christian

```

## Johannes Schindelin, 2007-03-18 23:09

Subject: Re: [wishlist] graphical diff
Message-ID: <Pine.LNX.4.63.0703182342110.22628@wbgn013.biozentrum.uni-wuerzburg.de>
URL: https://gitlist.dev/e/Pine.LNX.4.63.0703182342110.22628%40wbgn013.biozentrum.uni-wuerzburg.de
In-Reply-To: <200703181606.20678.robin.rosenberg.lists@dewire.com>

```
Hi,

On Sun, 18 Mar 2007, Robin Rosenberg wrote:

> söndag 18 mars 2007 14:16 skrev Raimund Bauer:
> > I think it would be really helpful (especially for newbies like me) to
> > have an option like
> > 
> > git diff --gui [revisions] <singe path spec>

And how do you set _what_ gui you want? Everybody has her pet diff-viewer 
(mine is less, BTW).

> Fine, except it is not likely to be my favourite gui. But you don't have 
> to wait, you can get a gui easily today.
>
> [...] 
> 
> git diff HEAD^..HEAD | kompare -

BTW here, "kompare -" does not work as expected. It shows an empty diff. 
At any rate, have you tried something like "GIT_PAGER='kompare -' git diff 
HEAD^..HEAD"?

This reminds me that I always wanted to be able to set the pager from the 
command line, so I can set an alias easily:

-- snipsnap --
[PATCH] Allow setting the pager from the command line

The command `git` already allows piping the output into a pager with
`-p`. Now also allow to set the pager with `-p=<pager-cmd>`.

With this, it is possible to make an alias of command/pager combos, like
this:

	$ git config alias.showmore '-p=more show'

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 Documentation/git.txt |    8 +++++---
 git.c                 |    7 ++++++-
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/Documentation/git.txt b/Documentation/git.txt
index 0b1203e..5634b30 100644
--- a/Documentation/git.txt
+++ b/Documentation/git.txt
@@ -9,7 +9,7 @@ git - the stupid content tracker
 SYNOPSIS
 --------
 [verse]
-'git' [--version] [--exec-path[=GIT_EXEC_PATH]] [-p|--paginate]
+'git' [--version] [--exec-path[=GIT_EXEC_PATH]] [-p|--paginate][=<pager-cmd>]
 	[-n|--name-rev] [-t|--name-rev-by-tags] [--bare]
 	[--git-dir=GIT_DIR] [--help] COMMAND [ARGS]
 
@@ -75,8 +75,10 @@ OPTIONS
 	environment variable. If no path is given 'git' will print
 	the current setting and then exit.
 
--p|--paginate::
-	Pipe all output into 'less' (or if set, $PAGER).
+-p|--paginate[=<pager-cmd>]::
+	Pipe all output into 'less'. You can override this by
+	"=<pager-cmd>", or setting the environment variables $GIT_PAGER
+	or $PAGER (in that order).
 
 -n|--name-rev:
 	Try naming all SHA1s, and page the result (see
diff --git a/git.c b/git.c
index fca1dfb..76b126d 100644
--- a/git.c
+++ b/git.c
@@ -4,7 +4,7 @@
 #include "quote.h"
 
 const char git_usage_string[] =
-	"git [--version] [--exec-path[=GIT_EXEC_PATH]] [-p|--paginate] [--bare] [--git-dir=GIT_DIR] [--help] COMMAND [ARGS]";
+	"git [--version] [--exec-path[=GIT_EXEC_PATH]] [-p|--paginate][=pager_cmd] [--bare] [--git-dir=GIT_DIR] [--help] COMMAND [ARGS]";
 
 static void prepend_to_path(const char *dir, int len)
 {
@@ -58,6 +58,11 @@ static int handle_options(const char*** argv, int* argc)
 			}
 		} else if (!strcmp(cmd, "-p") || !strcmp(cmd, "--paginate")) {
 			setup_pager();
+		} else if (!prefixcmp(cmd, "-p=") ||
+				!prefixcmp(cmd, "--paginate=")) {
+			const char *equal = strchr(cmd, '=');
+			setenv("GIT_PAGER", equal + 1, 1);
+			setup_pager();
 		} else if (!strcmp(cmd, "-n") || !strcmp(cmd, "--name-rev"))
 			setup_name_rev_pager(0);
 		else if (!strcmp(cmd, "-t") ||
-- 
1.5.0.4.2713.g4ff1

```

## Robin Rosenberg, 2007-03-18 23:51

Subject: Re: [wishlist] graphical diff
Message-ID: <200703190051.46954.robin.rosenberg.lists@dewire.com>
URL: https://gitlist.dev/e/200703190051.46954.robin.rosenberg.lists%40dewire.com
In-Reply-To: <Pine.LNX.4.63.0703182342110.22628@wbgn013.biozentrum.uni-wuerzburg.de>

```
måndag 19 mars 2007 00:09 skrev Johannes Schindelin:
> On Sun, 18 Mar 2007, Robin Rosenberg wrote:
> > git diff HEAD^..HEAD | kompare -
> 
> BTW here, "kompare -" does not work as expected. It shows an empty diff. 
I think that's what the older kompare did. That why mentioned that you need the
verson from 3.5.5, or even 3.5.6 for this to work.

> At any rate, have you tried something like "GIT_PAGER='kompare -' git diff 
> HEAD^..HEAD"?
Doesn't work here. Shows empty diff...

but AH, that's because of the colored-diff settings. I you have color.diff or color.status
set to true neither version will work. With auto the first one will, but not the second. 

-- robin

```

## Johannes Schindelin, 2007-03-19 00:09

Subject: Re: [wishlist] graphical diff
Message-ID: <Pine.LNX.4.63.0703190107410.22628@wbgn013.biozentrum.uni-wuerzburg.de>
URL: https://gitlist.dev/e/Pine.LNX.4.63.0703190107410.22628%40wbgn013.biozentrum.uni-wuerzburg.de
In-Reply-To: <200703190051.46954.robin.rosenberg.lists@dewire.com>

```
Hi,

On Mon, 19 Mar 2007, Robin Rosenberg wrote:

> måndag 19 mars 2007 00:09 skrev Johannes Schindelin:
> 
> > At any rate, have you tried something like "GIT_PAGER='kompare -' git 
> > diff HEAD^..HEAD"?
>
> Doesn't work here. Shows empty diff...
> 
> but AH, that's because of the colored-diff settings. I you have 
> color.diff or color.status set to true neither version will work.

I wonder why we still have "color.diff=true", which is wrong in almost 
_all_ cases (instead it should be auto).

> With auto the first one will, but not the second.

That is to be expected... Git actually expects the pager to be just that, 
a pager. So you have to say

$ GIT_PAGER='kompare -' git diff --no-color HEAD^..HEAD

Hth,
Dscho

```

## Raimund Bauer, 2007-03-19 08:14

Subject: RE: [wishlist] graphical diff
Message-ID: <001001c769fe$af8f4400$0b0aa8c0@abf.local>
URL: https://gitlist.dev/e/001001c769fe%24af8f4400%240b0aa8c0%40abf.local
In-Reply-To: <Pine.LNX.4.63.0703182342110.22628@wbgn013.biozentrum.uni-wuerzburg.de>

```
On Monday, March 19, Johannes Schindelin wrote:
> > söndag 18 mars 2007 14:16 skrev Raimund Bauer:
> > > I think it would be really helpful (especially for 
> newbies like me) 
> > > to have an option like
> > > 
> > > git diff --gui [revisions] <singe path spec>
> 
> And how do you set _what_ gui you want? Everybody has her pet 
> diff-viewer 
> (mine is less, BTW).

Maybe with a git.gui config option (like merge.tool)?
Or by specifying on the commandline:

git diff --gui=<my-gui-differ> ...

And <my-gui-differ> = xxdiff | kompare | tkdiff | ...

-- 
best regards

  Ray

```

## Johannes Schindelin, 2007-03-19 13:00

Subject: RE: [wishlist] graphical diff
Message-ID: <Pine.LNX.4.63.0703191359380.22628@wbgn013.biozentrum.uni-wuerzburg.de>
URL: https://gitlist.dev/e/Pine.LNX.4.63.0703191359380.22628%40wbgn013.biozentrum.uni-wuerzburg.de
In-Reply-To: <001001c769fe$af8f4400$0b0aa8c0@abf.local>

```
Hi,

On Mon, 19 Mar 2007, Raimund Bauer wrote:

> On Monday, March 19, Johannes Schindelin wrote:
> > > söndag 18 mars 2007 14:16 skrev Raimund Bauer:
> > > > I think it would be really helpful (especially for 
> > newbies like me) 
> > > > to have an option like
> > > > 
> > > > git diff --gui [revisions] <singe path spec>
> > 
> > And how do you set _what_ gui you want? Everybody has her pet 
> > diff-viewer 
> > (mine is less, BTW).
> 
> Maybe with a git.gui config option (like merge.tool)?
> Or by specifying on the commandline:
> 
> git diff --gui=<my-gui-differ> ...
> 
> And <my-gui-differ> = xxdiff | kompare | tkdiff | ...

Have you actually looked at the patch I sent? It is more logical to say 
"git -p=<bla> diff ..." when the option "-p" (without "=") already exists.

Ciao,
Dscho

```

## Raimund Bauer, 2007-03-19 16:44

Subject: RE: [wishlist] graphical diff
Message-ID: <1174322644.5639.17.camel@localhost>
URL: https://gitlist.dev/e/1174322644.5639.17.camel%40localhost
In-Reply-To: <Pine.LNX.4.63.0703191359380.22628@wbgn013.biozentrum.uni-wuerzburg.de>

```
Hi,

On Mon, 2007-03-19 at 14:00 +0100, Johannes Schindelin wrote:
> > Maybe with a git.gui config option (like merge.tool)?
> > Or by specifying on the commandline:
> > 
> > git diff --gui=<my-gui-differ> ...
> > 
> > And <my-gui-differ> = xxdiff | kompare | tkdiff | ...
> 
> Have you actually looked at the patch I sent? It is more logical to say 
> "git -p=<bla> diff ..." when the option "-p" (without "=") already exists.

I have, and I can't see your patch doing what I want.
Sorry if I haven't made myself clear what I want, but I was thinking
about a shortcut for something like the following example sequence:

$ git show v1.4.0:git.c > git.c.v1.4.0
$ git show v1.4.4:git.c > git.c.v1.4.4
$ tkdiff git.c.v1.4.0 git.c.v1.4.4
$ rm git.c.v1.4.0 git.c.v1.4.4

Replace tkdiff with the differ of your choice.

At least for comparing 2 single blobs that behavior should be well
defined. For comparing multiple blobs, checking them out in 2 separate
directories and starting the differ with the directories could work, but
I'm more after the single-file case for now ... and that's also the one
that should be easy to start from gitk.

If there's a way to do that by setting the pager I'll be happy to do
so ;-)

> Ciao,
> Dscho

-- 
best regards

  Ray

```

## Johannes Schindelin, 2007-03-19 16:49

Subject: RE: [wishlist] graphical diff
Message-ID: <Pine.LNX.4.63.0703191748580.22628@wbgn013.biozentrum.uni-wuerzburg.de>
URL: https://gitlist.dev/e/Pine.LNX.4.63.0703191748580.22628%40wbgn013.biozentrum.uni-wuerzburg.de
In-Reply-To: <1174322644.5639.17.camel@localhost>

```
Hi,

On Mon, 19 Mar 2007, Raimund Bauer wrote:

> $ git show v1.4.0:git.c > git.c.v1.4.0
> $ git show v1.4.4:git.c > git.c.v1.4.4
> $ tkdiff git.c.v1.4.0 git.c.v1.4.4
> $ rm git.c.v1.4.0 git.c.v1.4.4

This almost looks like a script! Why don't you make it one?

Ciao,
Dscho

```

## Raimund Bauer, 2007-03-19 20:29

Subject: RE: [wishlist] graphical diff
Message-ID: <1174336146.5639.26.camel@localhost>
URL: https://gitlist.dev/e/1174336146.5639.26.camel%40localhost
In-Reply-To: <Pine.LNX.4.63.0703191748580.22628@wbgn013.biozentrum.uni-wuerzburg.de>

```
On Mon, 2007-03-19 at 17:49 +0100, Johannes Schindelin wrote:
> Hi,
> 
> On Mon, 19 Mar 2007, Raimund Bauer wrote:
> 
> > $ git show v1.4.0:git.c > git.c.v1.4.0
> > $ git show v1.4.4:git.c > git.c.v1.4.4
> > $ tkdiff git.c.v1.4.0 git.c.v1.4.4
> > $ rm git.c.v1.4.0 git.c.v1.4.4
> 
> This almost looks like a script! Why don't you make it one?

Because I had hoped that someone more familiar with git and scripting
than me can come up with something, that
1.) also works in the multi-file case
2.) can take all the usual object and revision specifiers that git diff
takes.

And then there's gitk integration ...

But I'll take a look at it ;-)

> Ciao,
> Dscho

-- 
best regards

  Ray

```
