wake-up-neo.com

Kann TortoiseMerge mit Windows Git Bash als Difftool verwendet werden?

Ich fange gerade an, mit Git zu arbeiten. Ich möchte TortoiseMerge als difftool und mergetool verwenden.

In meiner .gtconfig in meinem persönlichen Benutzerverzeichnis habe ich die folgenden Abschnitte. Ich habe die Benutzer- und Farbabschnitte für diese Frage entfernt.

[merge]
    tool = tortoisemerge
[mergetool "tortoisemerge"]
    cmd = \"TortoiseMerge.exe\" -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\"
[diff]
    tool = tortoisemerge
[difftool "tortoisemerge"]
    cmd = \"TortoiseMerge.exe\" -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\"

Wenn ich am Git Bash Prompt Schildpatt tippe, wird es geladen. Es ist bekannt, dass es auf dem Weg ist. Wenn ich jedoch den Befehl eingebe, erhalte ich die folgende Fehlermeldung.

Rich:mygittest (master *)
$ git difftool
error: 'tortoisemerge' can only be used to resolve merges
merge tool candidates: kompare emerge vimdiff
No known merge resolution program available.
external diff died, stopping at readme.txt.
Rich:mygittest (master *)
$ 

Was verstehe ich nicht, damit dies funktioniert?. Tortoisemerge wird mit TortoiseSVN installiert.

42
Rich Shealer

Die folgenden Einstellungen funktionieren gut für mich. Ich verwende jedoch TortoiseGit nicht TortoiseSVN. Beachten Sie den Unterschied in den Parametern für diff.

[diff]
  tool = tortoisediff
[difftool]
  Prompt = false
[merge]
  tool = tortoisemerge
[mergetool]
  Prompt = false
  keepBackup = false
[difftool "tortoisediff"]
  cmd = \""c:/Program Files/TortoiseGIT/bin/TortoiseGitMerge.exe"\" -mine "$REMOTE" -base "$LOCAL"
[mergetool "tortoisemerge"]
  cmd = \""c:/Program Files/TortoiseGIT/bin/TortoiseGitMerge.exe"\" -base "$BASE" -theirs "$REMOTE" -mine "$LOCAL" -merged "$MERGED"
62
Klas Mellbourn

Damit Dateinamen mit Leerzeichen korrekt behandelt werden, sollten Sie die letzte Zeile der Antwort von @melbourn in ändern

cmd = \""c:/Program Files/TortoiseGIT/bin/TortoiseGitMerge.exe"\" -base "$BASE" -theirs "$REMOTE" -mine "$LOCAL" -merged "$MERGED"
6
jwg

Beim Umbasieren empfehle ich dringend, den Schalter $theirs und $mine zu wechseln, da sich dies beim Zusammenführen und beim Zusammenfügen von Datenbanken unterscheidet. Überprüfe hier:

Was ist die genaue Bedeutung von "uns" und "ihnen" in git?

Wenn Sie also wie ich Mergetool verwenden, tun Sie Folgendes:

[mergetool "tortoisemerge"]
cmd = \""c:/Program Files/TortoiseGIT/bin/TortoiseGitMerge.exe"\" -base "$BASE" -theirs "$LOCAL" -mine "$REMOTE" -merged "$MERGED"
0
WesternGun

Tolle Antwort von Klas Mellbourn! Ich habe mir eine Menge Zeit gespart. Ein Nachteil: Neue Added- oder Removed-Dateien im Repository werden während der Ausführung des difftool-Befehls nicht angezeigt. Es gibt nichts zu vergleichen! Dazu habe ich noch Folgendes getan: .__ (Inspiriert von answer meines Kollegen).

  1. Erstellen Sie eine Datei mit dem Namen empty.empty im Verzeichnis $Home (führen Sie start ~ in Ihrer Bash aus). Und wie der Name schon sagt, lassen Sie es leer.
  2. Erstellen Sie eine weitere Datei mit dem Namen tortoisediff.sh im Verzeichnis $Home/bin mit folgendem Inhalt

:

#!/bin/sh
# $LOCAL $REMOTE seem to be swapped
# $1 is $LOCAL
# $2 is $REMOTE

difftool='/c/Program Files/TortoiseGit/bin/TortoiseGitMerge.exe'
NULL="/dev/null"
empty="C:/home/empty.empty"

if [ "$1" == "$NULL" ]; then
    echo "Added: " "$2"
    "$difftool" /base:"$empty" /mine:"$2" /readonly:"$empty"
Elif [ "$2" == "$NULL" ]; then
    echo 'Removed: ' "$1"
    "$difftool" /base:"$1" /readonly:"$1" /mine:"$empty"
else
    echo 'Modified' "$2"
    "$difftool" /base:"$1" /basename:"$1" /readonly:"$1" /mine:"$2" /minename:"$2"
fi

# Checkout https://tortoisegit.org/docs/tortoisegitmerge/tme-automation.html for more
  1. Ändern Sie Ihre .gitconfig-Datei (Zeile 11 der Antwort)

    cmd = tortoisediff.sh "$LOCAL" "$REMOTE"

Dadurch würde sich difftool nun auf tortoisediff.sh beziehen, anstatt die Anwendung direkt zu öffnen.

  1. Denken Sie daran: Sie müssen git add . gefolgt von git difftool --staged anstelle von git difftool ausführen.
0
A-patel-guy
[diff]
  tool = tortoisediff
[difftool]
  Prompt = false
[merge]
  tool = tortoisemerge
[mergetool]
  Prompt = false
  keepBackup = false
[difftool "tortoisediff"]
  cmd = \""C:/Users/$USER/Desktop/TortoiseMerge.exe"\" -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\"
[mergetool "tortoisemerge"]
  cmd = \""C:/Users/$USER/Desktop/TortoiseMerge.exe"\" -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\"

Dies funktionierte für mich mit TortoiseMerge 1.6.7 (Portable)

0
smooth_smoothie