Domanda

Sto cercando di utilizzare p4merge con git, ma sto ottenendo:

Errore di partenza p4merge: "path / myFile" è (o punti a) un file non valido (questo elenca la base, locale, remota, e la versione standard del file)

.

Git mi racconta il conflitto allora chiede se voglio avviare il mergetool configurato (p4merge) e quindi ottengo l'errore di cui sopra.

Nota aggiuntiva: accade con qualsiasi file

!

Qualsiasi indizio su ciò che questo è e come risolvere il problema?

È stato utile?

Soluzione

Questo ha funzionato per me usando msysgit su Windows 7:

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

Non so perché, ma il quoting avvitato le cose per me.

Altri suggerimenti

Si vedere qui mia configurazione per DiffMerge o KDiff3.

In base a questo, mi sento di raccomandare per p4merge:

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

e merge.sh essendo un involucro (copiato in una directory a cui fa riferimento la tua PATH variabile d'ambiente), in grado di prendere in considerazione il caso in cui non esiste alcun BASE.
(Quando si crea un file in due rami differenti essendo allora fuse, non ci sarebbe nessun antenato comune per quel 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

Si può notare:

  • l'uso del PWD nella configurazione della fusione
  • l'uso di "merge" come nome del nome merge.tool (dal momento che il vero e proprio strumento viene chiamato nel $base sceneggiatura, in cui è possibile passare da un qualsiasi numero di strumento di unione che si desidera)
  • l'uso di doppi apici $alocal, $remote, $result, <=> all'interno dello script
  • il percorso condizionale per chiamare lo strumento, basato sull'esistenza di un file "base".
  • la necessità di avere sempre 3 file per unire come parametri (anche se 'base' non esiste ...)

appena provato (si scopre, puoi p4merge - sezione client / visiva strumento di unione -., anche se non si dispone di qualsiasi altro prodotto P4 installato)

Con le impostazioni descritto sopra, MSysGit1.6.3, sessione DOS o sessione di bash Git:
Funziona proprio TM .


Aggiornamento msysgit 1.7.x

Benjol menzioni nei commenti:

  

p4merge è ora supportato nativamente da msysgit .

     

Questo significa che si può fare solo:

git config --global merge.tool p4merge
# and I recommend 
git config --global mergetool.keepBackup false
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top