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.
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"
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"
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"
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).
empty.empty
im Verzeichnis $Home
(führen Sie start ~
in Ihrer Bash aus). Und wie der Name schon sagt, lassen Sie es leer.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
Ä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.
git add .
gefolgt von git difftool --staged
anstelle von git difftool
ausführen.[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)