Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Configuring a diff-tool for Git on Windows

Tags:

git

merge

diff

Since git diff in powershell mostly results in a unreadable amount of whitespace or strange characters, I installed Perforce P4Merge, to handle merging and diff.

However, I can't make git diff open the p4merge application to view the diff in. So far my .gitconfig looks like this:

[diff]
    tool = p4diff

[difftool "p4diff"]
    external = 'C:/PROGRA~1/Perforce/p4merge.exe "$LOCAL" "$REMOTE"'
    prompt = false

[merge]
    keepBackup = false
    tool = p4merge

[mergetool "p4merge"]
    cmd = "$BASE" "$LOCAL" "$REMOTE" "$MERGED"
    path = 'C:/PROGRA~1/Perforce/p4merge.exe'
    prompt = false
    keepBackup = false
    keepTemporaries = false
    trustExitCode = false

The paths are correct. But alas, git still attempts to present the diff in Powershell, when using git diff.

So what's the trick to make this work?

like image 944
Claus Jørgensen Avatar asked Oct 30 '11 12:10

Claus Jørgensen


2 Answers

In your command prompt, try: git config --global diff.tool p4diff

That worked for me, using a config file set up as you had described:

[diff]  
    tool = p4merge  
[difftool "p4diff"]  
    external = '"C:/Program Files/Perforce/p4merge.exe" "$LOCAL" "$REMOTE"'

Running git difftool opened p4merge as expected.

Ref: How do I view 'git diff' output with a visual diff program?

like image 104
Kenny Trytek Avatar answered Oct 11 '22 10:10

Kenny Trytek


I'm on WIndows 7 using MSysGit v1.8.4.

For me, the only solution was to add p4merge to the system path variable (reboot needed afterwards). Having done this, i conf'd it like this:

git config --global diff.tool p4merge
git config --global difftool.p4merge.cmd 'p4merge.exe $LOCAL $REMOTE'
git config --global difftool.prompt false

git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd 'p4merge.exe $BASE $LOCAL $REMOTE $MERGED'
git config --global mergetool.prompt false
git config --global mergetool.trustExitCode false
git config --global mergetool.keepBackup false

I recommend you stick to "git config" instead of editing the conf manually because hyphens etc sometimes are different between these methods.

like image 34
Someguy Avatar answered Oct 11 '22 09:10

Someguy