2009-05-14 16 views
27

Estoy tratando de utilizar p4merge con git, pero me estoy haciendo: p4merge partirerror p4merge [GIT]

de error: "ruta/myFile" es (o puntos a) un archivo no válido (esta lista la BASE , LOCAL, REMOTO y versión estándar del archivo).

Git me cuenta sobre el conflicto y luego pregunta si quiero iniciar el mergetool configurado (p4merge) y luego aparece el error anterior.

Nota adicional: sucede con cualquier archivo!

¿Alguna pista sobre qué es esto y cómo solucionarlo?

+0

Quizás incluya su sección en .gitconfig donde configura la herramienta de fusión y el mensaje de error completo? ¿Tiene espacios en un nombre de archivo o algo así? – araqnid

+0

no hay espacios en el nombre de archivo - configuré git usando esta pregunta: http://stackoverflow.com/questions/426026/git-on-windows-how-do-you-set-up-a-mergetool – JohnIdol

+0

Posible duplicado de [ git diff tmp archivo no válido en Windows cuando se usa un programa externo en Windows 7] (http://stackoverflow.com/questions/16551253/git-diff-tmp-file-invalid-on-windows-when-using-external-program- on-windows-7) – Powerslave

Respuesta

38

Esto funcionó para mí usando msysGit en Windows 7:

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

No sé por qué pero la citando cosas atornillados para mí .

+0

¡Trabajó en cygwin también! – Ben

+0

Cambió de una máquina Win 8 a otra, ambas usando git bash y tuve que hacer esto también, ¡gracias! –

+0

No funcionó en cmd.exe pero funciona en MINGW32. – Roberto

8

Usted see here mi configuración para DiffMerge o KDiff3.

Basado en esto, yo recomendaría para p4merge:

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

y merge.sh ser un envoltorio (copiado en un directorio al que hace referencia la variable de entorno PATH), capaz de tener en cuenta el caso en el que hay BASE existe.
(cuando se crea un archivo en dos ramas diferentes que se fusionaron luego, no habría ningún ancestro común para ese archivo)

#!/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 

Es posible que tenga en cuenta:

  • el uso de PWD en la configuración de la fusión
  • el uso de "merge" como nombre del nombre merge.tool (ya que la herramienta real se invoca en el script merge.sh, donde puede cambiar entre cualquier número de herramienta de fusión que desee)
  • el uso de comillas dobles alrededor de $base, $alocal, $remote, $result dentro del guión
  • el camino condicional para llamar la herramienta, basada en la existencia de un fichero "base".
  • la necesidad de tener siempre 3 archivos para fusionarse como parámetros (incluso cuando 'base' no existe ...)

acabo de probar que (resulta, que pueda download and install only p4merge - sección Client/Visual Merge Tool -, incluso si no tiene otro producto P4 instalado).

Con la configuración se ha descrito anteriormente, MSysGit1.6.3, sesión de DOS o sesión de bash Git:
simplemente funciona TM.


Actualización msysgit 1.7.x

Benjol menciones en los comentarios:

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 
+0

suena genial - ¡Lo probaré lo antes posible y te lo haré saber! – JohnIdol

+0

Usted tiene "merge.sh dos veces en la segunda línea de su primer bloque de código, pero con eso corregido, todo funciona. Gracias! – Benjol

+0

@Benjol gracias. He solucionado el error – VonC

Cuestiones relacionadas