Marcin Zalewski, 29.04.2009: > Hi, > > When git-difftool calls a diff tool, it uses file names given to it by > git-diff. This is a problem because often one of the files to be > compared is the same as the file to be merged into. What I mean is > that, in the following fragment of the git-difftool--helper file, $1 > and $2 (I think) may end up being the same: > > launch_merge_tool () { > # Merged is the filename as it appears in the work tree > # Local is the contents of a/filename > # Remote is the contents of b/filename > # Custom merge tool commands might use $BASE so we provide it > MERGED="$1" > LOCAL="$2" > REMOTE="$3" > BASE="$1" > > Git-mergetool creates a temporary file for merging, but git-difftool > does not. Since git-diff tools is not meant for merging anything, it > may seem that there is no problem. However, some merge tools (such as > ediff) do not like when the merge target is the same as one of the > files to be compared. I use the following emacs snippet by Theodore > Tso: > > http://kerneltrap.org/mailarchive/git/2007/7/2/250505 > > With that emacs code, ediff refuses to do a diff with the way that > difftool is done now. I do not have a patch, but it seems that a > simple fix would be to copy the code that creates temporary files from > mergetool. The real fix would be to adjust the ediff snippet for difftool support. As you said yourself, git-difftool is not meant for merging files, so there is no reason to open more than 2 files at all. The built-in difftools 'emerge' and 'ecmerge' still seem to open LOCAL, REMOTE and MERGED. This should be fixed, so that they don't open MERGED any more, but I don't have emacs installed, so I shouldn't try it myself. Oh, and LOCAL shouldn't be copied to a temporary file in the first place, because people don't use git-difftool in read-only mode only. Markus -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html