2009-05-14 7 views
27

Ich versuche p4merge mit git zu verwenden, aber ich bin immer:p4merge Fehler [GIT]

Start p4merge Fehler: "path/myFile" (oder Punkte) eine ungültige Datei (dies listet die BASE , LOCAL, REMOTE und Standardversion der Datei).

Git erzählt mir über den Konflikt, dann fragt es, ob ich das Mergetool konfiguriert (p4merge) starten will und dann bekomme ich den Fehler oben.

Zusätzliche Anmerkung: Es passiert mit jeder Datei!

Irgendwelche Hinweise darauf, was das ist und wie man es beheben kann?

+0

Vielleicht enthalten Sie Ihren Abschnitt in. Gitconfig, wo Sie das Merge-Tool und die vollständige Fehlermeldung konfigurieren? Haben Sie Leerzeichen in einem Dateinamen oder etwas? – araqnid

+0

nein keine Leerzeichen in Dateiname - ich konfiguriert Git mit dieser Frage: http://StackOverflow.com/Questions/426026/Git-on-Windows-How-Do-You-Set-Up-AmergeTool – JohnIdol

+0

Mögliche Duplikat von [ git diff tmp-Datei ungültig unter Windows bei Verwendung eines externen Programms unter Windows 7] (http://stackoverflow.com/questions/16551253/git-diff-tmp-file-invalid-on-windows-when-using-external-program- on-windows-7) – Powerslave

Antwort

38

Das ist für mich gearbeitet msysGit auf Windows 7 verwenden: für mich

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

nicht sicher, warum, aber die zitierte geschraubt Dinge .

+0

Arbeitete auch in Cygwin! – Ben

+0

Von einer Win 8 Maschine zur anderen gewechselt, beide mit git bash und mussten das auch tun, danke! –

+0

Hat nicht mit cmd.exe funktioniert, funktioniert aber mit MINGW32. – Roberto

8

Sie werden see here meine Konfig für DiffMerge oder KDiff3.

auf dieser Grundlage würde ich für p4merge empfehlen:

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

und merge.sh, in der Lage zu berücksichtigen den Fall, in dem kein einen Wrapper (in einem Verzeichnis von Ihrem PATH Umgebungsvariable referenziert kopiert) wird BASE existiert.

  • die Verwendung von PWD in der config:

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

    Sie beachten können (wenn eine Datei in zwei verschiedenen Zweigen erstellt wird, dann würde es fusionierte für diese Datei keine gemeinsamen Vorfahren sein) der Zusammenführung

  • die Verwendung von "merge" als Name des merge.tool-Namen (seit das eigentliche Tool im merge.sh Skript aufgerufen wird, wo Sie zwischen beliebig vielen Merge-Tools wechseln können, die Sie möchten)
  • die Verwendung von doppelten Anführungszeichen um $base, $alocal, $remote, $result im Skript
  • der bedingten Pfad für das Tool aufrufen, auf der Grundlage der Existenz einer „Basis“ Datei.
  • die Notwendigkeit, immer 3 Dateien haben als Parameter (auch wenn ‚Basis‘ existieren ... nicht)

gerade getestet, fusionieren (es stellt sich heraus, können Sie download and install only p4merge - Abschnitt Client/Visual Merge Tool - auch wenn Sie kein anderes P4-Produkt installiert haben.

Mit den Einstellungen oben beschrieben, MSysGit1.6.3, DOS-Sitzung oder Git Bash-Sitzung:
Es funktioniert nur TM.


Aktualisierung msysgit 1.7.x

Benjol erwähnt in den Kommentaren:

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

klingt cool - ich werde es so schnell wie möglich geben und lassen Sie es wissen! – JohnIdol

+0

Sie haben "merge.sh zweimal in der zweiten Zeile Ihres ersten Codeblocks, aber damit korrigiert, funktioniert alles. Danke! – Benjol

+0

@Benjol danke. Ich habe den Tippfehler behoben. – VonC