¿Se puede usar TortoiseMerge como difftool con Windows Git Bash?
tortoisegit git-diff (3)
¡Gran respuesta! Me ahorró un montón de tiempo. Un inconveniente es que los archivos recién agregados o eliminados del repositorio no aparecerán durante la ejecución del comando difftool. Esto es lo que hice además de esto: (Inspirado por la answer mi compañero de trabajo).
- Cree un archivo llamado
empty.empty
en el directorio$Home
(C: / home). Y como su nombre lo sugiere, manténgalo vacío. - Cree otro archivo llamado
tortoisediff.sh
en el directorio$Home/bin
(C: / home / bin) con el siguiente contenido
:
#!/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
Modifique su archivo .gitconfig (Línea 11 de la respuesta)
cmd = tortoisediff.sh "$LOCAL" "$REMOTE"
Esto ahora haría que difftool se refiera a tortoisediff.sh en lugar de abrir la aplicación directamente.
- Tenga en cuenta: tendría que ejecutar
git add .
seguido degit difftool --staged
lugar de simplementegit difftool
.
Estoy empezando a trabajar con Git. Me gustaría utilizar TortoiseMerge como difftool y mergetool.
En mi .gtconfig en mi directorio personal de usuarios tengo las siguientes secciones. Eliminé las secciones de usuario y color para esta pregunta.
[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/"
Si escribo tortoisemerge en el indicador de Git Bash, se carga. Se sabe que está en el camino. Pero si escribo el comando obtengo el siguiente error.
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 *)
$
¿Qué no estoy entendiendo para que esto funcione? Tortoisemerge está instalado con TortoiseSVN.
La siguiente configuración funciona bien para mí. Sin embargo, estoy usando TortoiseGit y no TortoiseSVN. Observe la diferencia en los parámetros para 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"
Para que los nombres de archivos con espacios se manejen correctamente, debe cambiar la última línea de la respuesta de @ melbourn a
cmd = /""c:/Program Files/TortoiseGIT/bin/TortoiseGitMerge.exe"/" -base "$BASE" -theirs "$REMOTE" -mine "$LOCAL" -merged "$MERGED"