Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

p4merge error [GIT]

I am trying to use p4merge with git but I am getting:

Error starting p4merge: "path/myFile" is (or points to) an invalid file (this lists the BASE, LOCAL, REMOTE, and standard version of the file).

Git tells me about the conflict then it asks if I wanna start the mergetool configured (p4merge) and then I get the error above.

Additional note: it happens with any file!

Any clue about what this is and how to fix it?

like image 343
JohnIdol Avatar asked May 14 '09 22:05

JohnIdol


People also ask

What is p4merge in git?

P4Merge tracks and compares the effects of past and pending work for branches and individual files. You can even use it to resolve conflicts (especially with Git).


2 Answers

This worked for me using msysGit on windows 7:

git config --global merge.tool p4merge git config --global mergetool.p4merge.cmd 'p4merge $BASE $LOCAL $REMOTE $MERGED' 

Not sure why but the quoting screwed things up for me.

like image 185
Mike Glenn Avatar answered Oct 01 '22 12:10

Mike Glenn


You will see here my config for DiffMerge or KDiff3.

Based on that, I would recommend for p4merge:

git config --global merge.tool merge git config --global mergetool.merge.cmd "merge.sh \"$PWD/$LOCAL\" \"$PWD/$BASE\" \"$PWD/$REMOTE\" \"$PWD/$MERGED\"" 

and merge.sh being a wrapper (copied in a directory referenced by your PATH environment variable), able to take into account the case where no BASE exists.
(when a file is created in two different branches being then merged, there would be no common ancestor for that file)

#!/bin/sh  # Passing the following parameters to mergetool: #  local base remote merge_result  alocal=$1 base=$2 remote=$3 result=$4  if [ -f $base ] then     p4merge.exe -dl "$base" "$alocal" "$remote" "$result"  else     p4merge.exe -dl "$result" "$alocal" "$remote" "$result"  fi 

You may note:

  • the use of PWD in the config of the merge
  • the use of "merge" as name of the merge.tool name (since the actual tool is called in the merge.sh script, where you can switch between any number of merge tool you want)
  • the use of double quotes around $base, $alocal, $remote, $result within the script
  • the conditional path for calling the tool, based on the existence of a "base" file.
  • the need to always have 3 files to merge as parameters (even when 'base' does not exist...)

Just tested it (it turns out, you can download and install only p4merge -- section Client/Visual Merge Tool --, even if you do not have any other P4 product installed).

With the settings describe above, MSysGit1.6.3, DOS session or Git bash session:
It just worksTM.


Update msysgit 1.7.x

Benjol mentions in the comments:

p4merge is now supported natively by msysgit.

This means you can just do:

git config --global merge.tool p4merge # and I recommend  git config --global mergetool.keepBackup false 
like image 45
VonC Avatar answered Oct 01 '22 11:10

VonC