Frage

Ich habe msysGit und Git auf Cygwin versucht. Beide arbeiten ganz gut an und für sich und beide laufen gitk und git-gui perfekt.

Nun, wie zum Teufel konfiguriere ich einen mergetool? (Vimdiff arbeitet auf Cygwin, vorzugsweise aber würde Ich mag etwas ein wenig benutzerfreundlicher für einige unserer Windows-liebenden Mitarbeiter.)

War es hilfreich?

Lösung

Antwort auf Follow-up auf Charles Bailey, hier ist mein git Setup, das p4merge (freie Querplattform 3Way Merge-Tool); getestet auf msys Git (Windows) installieren:

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

oder von einem Fenster cmd.exe Schale, die zweite Zeile wird:

git config --global mergetool.p4merge.cmd "p4merge.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""

Die Änderungen (in Bezug auf Charles Bailey):

  • hinzugefügt, um globale git Config, das heißt gültig für alle git Projekte nicht nur die aktuell
  • das Anpassungs-Tool Konfigurations Wert befindet sich in "mergetool. [Werkzeug] .cmd", nicht "merge. [Werkzeug] .cmd" (dumm von mir, verbrachte Fehlerbehebung eine Stunde warum git beschweren gehalten über nicht vorhandene Werkzeug)
  • hinzugefügt doppelte Anführungszeichen für alle Dateinamen, so dass Dateien mit Leerzeichen noch durch das Merge-Tool gefunden werden kann (Getestet habe ich diese in msys Git von Powershell)
  • beachten Sie, dass Perforce wird standardmäßig die Installation dir hinzufügen PATH, so dass keine Notwendigkeit vollständigen Pfad angeben, in dem Befehl p4merge

Download: http: //www.perforce. com / product / components / notgedrungen Vision-Merge-and-diff-Tools


Bearbeiten (Feb 2014)

Wie von @Gregory Pakosz , neueste msys git jetzt "nativ" unterstützt p4merge (getestet auf 1.8.5.2.msysgit.0 ).

Sie können die Liste der unterstützten Tools angezeigt werden, indem Sie:

git mergetool --tool-help

Sie sollten sehen p4merge in entweder verfügbar oder gültig Liste. Falls nicht, aktualisieren Sie bitte Ihre git.

Wenn p4merge wurde gezeigt als verfügbar , ist es in Ihrem PATH und Sie setzen müssen merge.tool :

git config --global merge.tool p4merge

Wenn es aufgeführt wurde als gültig , müssen Sie definieren mergetool.p4merge.path neben merge.tool :

git config --global mergetool.p4merge.path c:/Users/my-login/AppData/Local/Perforce/p4merge.exe
  • Das oben ist ein Beispiel Pfad, wenn p4merge für den aktuellen Benutzer installiert wurde, nicht systemweit (benötigt keine Administratorrechte oder UAC)
  • Obwohl ~ dem aktuellen Benutzer-Home-Verzeichnis (so in der Theorie sollte der Weg sein ~/AppData/Local/Perforce/p4merge.exe) erweitern sollte dies nicht für mich arbeiten
  • Auch wäre besser gewesen Vorteil einer Umgebungsvariablen zu übernehmen (zB $LOCALAPPDATA/Perforce/p4merge.exe), git scheint nicht erweitert Umgebungsvariablen für Pfade zu sein (wenn Sie wissen, wie diese Funktion zu erhalten, wenden Sie sich bitte lassen Sie mich diese Antwort wissen oder aktualisieren)

Andere Tipps

Einstellung mergetool.p4merge.cmd nicht mehr funktionieren wird seit Git begonnen hat versucht p4merge, zu unterstützen siehe libexec / git-core / git-mergetool--lib.so brauchen wir nur für git den mergetool Pfad angeben, zum Beispiel die p4merge:

git config --global mergetool.p4merge.path 'C:\Program Files\Perforce\p4merge.exe'
git config --global merge.tool p4merge

Dann wird es funktionieren.

Ich bin mit Tragbarer Git auf WinXP (funktioniert ein Genuss!) Und benötigt einen Konflikt zu lösen, die in Verzweigung kam. Von allen GUIs habe ich geprüft, KDiff3 erwies sich die transparent zu verwenden sein.

Aber ich fand die Anweisungen, die ich brauchte, um es in Windows in diese Blog-Post , Anweisungen, die hier ein wenig von den anderen Ansätzen aufgeführten abweichen. Es belief sich im Grunde diese Zeilen meiner .gitconfig-Datei hinzufügen:

[merge]
    tool = kdiff3

[mergetool "kdiff3"]
    path = C:/YourPathToBinaryHere/KDiff3/kdiff3.exe
    keepBackup = false
    trustExitCode = false

Arbeiten gut jetzt!

Unter Cygwin, die nur , was für mich gearbeitet ist wie folgt vor:

git config --global merge.tool myp4merge
git config --global mergetool.myp4merge.cmd 'p4merge.exe "$(cygpath -wla $BASE)" "$(cygpath -wla $LOCAL)" "$(cygpath -wla $REMOTE)" "$(cygpath -wla $MERGED)"'
git config --global diff.tool myp4diff
git config --global difftool.myp4diff.cmd 'p4merge.exe "$(cygpath -wla $LOCAL)" "$(cygpath -wla $REMOTE)"'

Auch Ich mag die schnelle Nachricht für difftool deaktivieren:

git config --global difftool.prompt false

git mergetool ist vollständig konfigurierbar, so dass Sie ziemlich viel können Sie Ihre Lieblings-Tool gewählt haben.

Die vollständige Dokumentation ist hier: http: // www.kernel.org/pub/software/scm/git/docs/git-mergetool.html

Kurz gesagt, können Sie eine Standard mergetool gesetzt, indem der Benutzer Konfigurationsvariable merge.tool Einstellung.

Wenn das Merge-Tool einer von denen nativ von ihr unterstützt ist, dass Sie nur mergetool.<tool>.path auf den vollständigen Pfad zu dem Werkzeug eingestellt haben (ersetzen <tool> durch das, was Sie merge.tool konfiguriert haben zu sein.

Sie können aber mergetool.<tool>.cmd auf ein kleines Shell gesetzt eval'ed zur Laufzeit werden mit den Shell-Variablen auf die entsprechenden Dateien eingestellt $BASE, $LOCAL, $REMOTE, $MERGED. Sie haben ein bisschen vorsichtig mit der Flucht sein, ob Sie direkt eine Konfigurationsdatei bearbeiten oder die Variable mit dem git config Befehl gesetzt.

So etwas sollte den Geschmack von dem, was Sie tun können ( ‚mymerge‘ ist ein fiktives Werkzeug).

git config merge.tool mymerge
git config merge.mymerge.cmd 'mymerge.exe --base "$BASE" "$LOCAL" "$REMOTE" -o "$MERGED"'

Wenn Sie Setup Ihre Lieblings-Merge-Tool haben, ist es einfach eine Frage der laufenden git mergetool, wenn Sie Konflikte zu lösen.

Das p4merge Tool von Perforce ist ein ziemlich gutes Standalone-Merge-Tool.

Für unvergleichbar auf Windows 7

git config --global merge.tool bc3
git config --global mergetool.bc3.path "C:\Program Files (x86)\Beyond Compare 3\BCompare.exe"

Es scheint, dass neuere Versionen unterstützen git p4merge direkt, also

git config --global merge.tool p4merge

sollte alles, was Sie brauchen, wenn p4merge.exe auf dem Weg ist. Keine Notwendigkeit zur Einrichtung cmd oder Pfad.

Wie bereits hier beantwortet (und hier und < a href = "https://stackoverflow.com/questions/161813/how-do-i-fix-merge-conflicts-in-git"> hier ), ist mergetool der Befehl dies zu konfigurieren. Für ein schönes grafisches Frontend empfehle ich kdiff3 (GPL).

Ich hatte die extra fallen unter Angabe mit msysGit auf Windows 7, nicht sicher, warum.

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

Wenn Sie dies durch Cygwin tun, müssen Sie möglicherweise cygpath verwenden:

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

Bah, das schließlich für mich gearbeitet (Windows 7 + Cygwin + TortoiseMerge):

In .git / config:

cmd = TortoiseMerge.exe /base:$(cygpath -d \"$BASE\") /theirs:$(cygpath -d \"$REMOTE\") /mine:$(cygpath -d \"$LOCAL\") /merged:$(cygpath -d \"$MERGED\")

Dank vorherige Plakate für die Spitze cygpath zu verwenden!

Ich verwende eine App namens WinMerge ( http://winmerge.org/ ) Informationen aus ihrem Handbuch ( http://manual.winmerge.org/CommandLine.html )

Dies ist der Bash-Skript i von der mergetool Richtlinie über .gitconfig verwenden

#!/bin/sh
# using winmerge with git
# replaces unix style null files with a newly created empty windows temp file

file1=$1
if [ "$file1" == '/dev/null' ] || [ "$file1" == '\\.\nul' ] || [ ! -e "$file1" ]
    then 
       file1="/tmp/gitnull"
       `echo "">$file1`
fi
file2=$2
if [ "$file2" == '/dev/null' ] || [ "$file2" == '\\.\nul' ] || [ ! -e "$file2" ]
    then 
       file2="/tmp/gitnull"
       `echo "">$file2`
fi
echo diff : $1 -- $2
"C:\Program files (x86)\WinMerge\WinMergeU.exe" -e -ub -dl "Base" -dr "Mine" "$file1" "$file2"

im Grunde die bash entfallen, wenn das Ergebnis des diff in einer leeren Datei und erstellt eine neue temporäre Datei an der richtigen Stelle.

Ich fand zwei Arten zu konfigurieren " SourceGear DiffMerge ", wie difftool und mergetool in Github von Windows.

Die folgenden Befehle in einem Eingabeaufforderungsfenster wird aktualisiert Ihre .gitconfig GIT Verwendung DiffMerge zu konfigurieren:

git config --global diff.tool diffmerge
git config --global difftool.diffmerge.cmd 'C:/Program\ Files/SourceGear/Common/DiffMerge/sgdm.exe  \"$LOCAL\" \"$REMOTE\"'

git config --global merge.tool diffmerge
git config --global mergetool.diffmerge.cmd  'C:/Program\ Files/SourceGear/Common/DiffMerge/sgdm.exe  -merge  -result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"'

[ oder ]

Fügen Sie die folgenden Zeilen zu Ihrer .gitconfig. Diese Datei sollte in Ihrem Home-Verzeichnis in C: \ Users \ Benutzername:

[diff]
    tool = diffmerge
[difftool "diffmerge"]
    cmd = C:/Program\\ Files/SourceGear/Common/DiffMerge/sgdm.exe \"$LOCAL\" \"$REMOTE\"

[merge]
    tool = diffmerge
[mergetool "diffmerge"]
    trustExitCode = true
    cmd = C:/Program\\ Files/SourceGear/Common/DiffMerge/sgdm.exe -merge -result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"

Sie können diese Optionen hinzufügen möchten auch:

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

Auch ich weiß nicht, warum, aber das Zitat und Slash von Milan Gardian Antwort geschraubt Dingen für mich.

Wenn jemand verwenden Gvim als Diff-Tool auf TortoiseGit will, dann ist es das, was Sie in die Texteingabe für den Pfad zum externen Diff-Tool eingeben müssen:

path\to\gvim.exe -f -d -c "wincmd R" -c "wincmd R" -c "wincmd h" -c "wincmd J"

Für IntelliJ IDEA (Community Edition) 3-Wege-git mergetool Konfiguration in Windows-Umgebung (~/.gitconfig)

Cygwin

[mergetool "ideamerge"]
     cmd = C:/Program\\ Files\\ \\(x86\\)/JetBrains/IntelliJ\\ IDEA\\ Community\\ Edition\\ 14.1.3/bin/idea.exe merge `cygpath -wa $LOCAL` `cygpath -wa $REMOTE` `cygpath -wa $BASE` `cygpath -wa $MERGED`
[merge]
     tool = ideamerge

Msys

[mergetool "ideamerge"]
cmd = "/c/Program\\ Files\\ \\(x86\\)/JetBrains/IntelliJ\\ IDEA\\ Community\\ Edition\\ 14.1.3/bin/idea.exe" merge `~/winpath.sh $LOCAL` `~/winpath.sh $REMOTE` `~/winpath.sh $BASE` `~/winpath.sh $MERGED`
[merge]
 tool = ideamerge

Das ~ / winpath.sh ist Pfad zu Windows auf msys konvertieren und genommen wird von msys Wegwandlung Frage auf Stackoverflow

#! /bin/sh                                                               

function wpath {                                                         
    if [ -z "$1" ]; then                                                 
        echo "$@"                                                        
    else                                                                 
        if [ -f "$1" ]; then                                             
            local dir=$(dirname "$1")                                    
            local fn=$(basename "$1")                                    
            echo "$(cd "$dir"; echo "$(pwd -W)/$fn")" | sed 's|/|\\|g';  
        else                                                             
            if [ -d "$1" ]; then                                         
                echo "$(cd "$1"; pwd -W)" | sed 's|/|\\|g';              
            else                                                         
                echo "$1" | sed 's|^/\(.\)/|\1:\\|g; s|/|\\|g';          
            fi                                                           
        fi                                                               
    fi                                                                   
}                                                                        

wpath "$@" 

Zur Einrichtung p4merge installiert chocolatey mit auf Fenster für beide verschmelzen und diff, hier einen Blick: https://gist.github.com/CamW/88e95ea8d9f0786d746a

Wenn Sie Probleme beim Öffnen p4merge aus SourceTree sucht Sie lokale Konfigurationsdatei mit dem Namen Konfiguration unter MyRepo.git und löschen Sie alle Merge-Konfiguration. In meinem Fall wurde versucht, es Meld zu öffnen, die gerade deinstalliert ich

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top