para - git windows xp
Git en Windows: ¿Cómo configura un mergetool? (18)
Bah, esto finalmente funcionó para mí (Windows 7 + Cygwin + TortoiseMerge):
En .git / config:
cmd = TortoiseMerge.exe /base:$(cygpath -d /"$BASE/") /theirs:$(cygpath -d /"$REMOTE/") /mine:$(cygpath -d /"$LOCAL/") /merged:$(cygpath -d /"$MERGED/")
Gracias a los carteles anteriores por la punta de usar cygpath!
He intentado msysGit y Git en Cygwin. Ambos funcionan bien por sí mismos y ejecutan gitk y git-gui a la perfección.
¿Cómo diablos configuro un mergetool? (Vimdiff trabaja en Cygwin, pero preferiblemente me gustaría algo más fácil de usar para algunos de nuestros compañeros de trabajo amantes de Windows).
Bajo Cygwin, lo único que me funcionó es lo siguiente:
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)"''
Además, me gusta desactivar el mensaje de solicitud de difftool:
git config --global difftool.prompt false
Encontré dos formas de configurar " SourceGear DiffMerge " como difftool y mergetool en github Windows.
Los siguientes comandos en una ventana del símbolo del sistema actualizarán su .gitconfig para configurar GIT usando DiffMerge:
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/"''
[ O ]
Agrega las siguientes líneas a tu .gitconfig. Este archivo debe estar en su directorio de inicio en C: / Users / UserName:
[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/"
Es posible que desee agregar estas opciones también:
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
Además, no sé por qué, pero la respuesta y el recorte de la respuesta de Milan Gardian me jodieron las cosas.
Estoy usando Portable Git en WinXP (¡funciona muy bien!), Y necesito resolver un conflicto que surgió en la ramificación. De todos los gui que revisé, KDiff3 demostró ser el más transparente de usar.
Pero encontré las instrucciones que necesitaba para que funcionaran en Windows en esta publicación de blog , instrucciones que difieren ligeramente de los otros enfoques enumerados aquí. Básicamente, se trata de agregar estas líneas a mi archivo .gitconfig
:
[merge]
tool = kdiff3
[mergetool "kdiff3"]
path = C:/YourPathToBinaryHere/KDiff3/kdiff3.exe
keepBackup = false
trustExitCode = false
Trabajando bien ahora!
Para configurar p4merge, instalado con chocolatey en windows para fusionar y diferenciar, eche un vistazo aquí: https://gist.github.com/CamW/88e95ea8d9f0786d746a
Para continuar con la respuesta de Charles Bailey, aquí está mi configuración de git que usa p4merge (herramienta de combinación de 3 p4merge gratuita); probado en msys Git (Windows) instalar:
git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd ''p4merge.exe /"$BASE/" /"$LOCAL/" /"$REMOTE/" /"$MERGED/"''
o, desde un shell de Windows cmd.exe, la segunda línea se convierte en:
git config --global mergetool.p4merge.cmd "p4merge.exe /"$BASE/" /"$LOCAL/" /"$REMOTE/" /"$MERGED/""
Los cambios (relativos a Charles Bailey):
- agregado a la configuración global de git, es decir, válido para todos los proyectos de git, no solo el actual
- el valor de configuración de la herramienta personalizada reside en "mergetool. [tool] .cmd", no en "merge. [tool] .cmd" (tonto, pasé una hora resolviendo por qué git seguía quejándose de una herramienta no existente)
- Se agregaron comillas dobles para todos los nombres de archivos, de modo que la herramienta de combinación aún puede encontrar archivos con espacios (lo probé en msys Git de Powershell)
- tenga en cuenta que, de forma predeterminada, Perforce agregará su directorio de instalación a PATH, por lo que no es necesario especificar la ruta completa a p4merge en el comando
Descargar: p4merge
EDITAR (febrero 2014)
Como lo señaló @Gregory Pakosz , el último msys git ahora "nativamente" es compatible con p4merge (probado en 1.8.5.2.msysgit.0 ).
Puede mostrar la lista de herramientas compatibles ejecutando:
git mergetool --tool-help
Debería ver p4merge en la lista disponible o válida . Si no, por favor actualice su git.
Si p4merge estaba listado como disponible , está en su PATH y solo tiene que configurar merge.tool :
git config --global merge.tool p4merge
Si estaba listado como válido , debe definir mergetool.p4merge.path además de merge.tool :
git config --global mergetool.p4merge.path c:/Users/my-login/AppData/Local/Perforce/p4merge.exe
- Lo anterior es un ejemplo de ruta cuando se instaló p4merge para el usuario actual, no para todo el sistema (no necesita derechos de administrador ni elevación de UAC)
- Aunque
~
debería expandirse al directorio principal del usuario actual (así que en teoría la ruta debería ser~/AppData/Local/Perforce/p4merge.exe
), esto no me funcionó - Aún mejor hubiera sido aprovechar una variable de entorno (por ejemplo,
$LOCALAPPDATA/Perforce/p4merge.exe
), git no parece estar expandiendo las variables de entorno para las rutas (si sabe cómo hacer que esto funcione, hágamelo saber o actualizar esta respuesta)
Para la configuración de git mergetool de IntelliJ IDEA (Community Edition) en el entorno de Windows ( ~/.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
El ~ / winpath.sh es para convertir rutas a Windows en msys y se toma de la pregunta de conversión de ruta de msys en
#! /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 "$@"
Para más allá de comparar en Windows 7
git config --global merge.tool bc3
git config --global mergetool.bc3.path "C:/Program Files (x86)/Beyond Compare 3/BCompare.exe"
Parece que las nuevas versiones de git soportan p4merge directamente, por lo que
git config --global merge.tool p4merge
debe ser todo lo que necesita, si p4merge.exe está en su ruta. No hay necesidad de configurar cmd o ruta.
Si alguien quiere usar gvim como su herramienta de diferencias en TortoiseGit, esto es lo que necesita para ingresar en la entrada de texto para la ruta a la herramienta de diferencias externa:
path/to/gvim.exe -f -d -c "wincmd R" -c "wincmd R" -c "wincmd h" -c "wincmd J"
Si estás haciendo esto a través de cygwin, es posible que necesites usar cygpath:
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`''
Si tiene problemas para abrir p4merge desde SourceTree, busque el archivo de configuración local llamado config en MyRepo.git y elimine cualquier configuración de combinación. En mi caso, estaba intentando abrir Meld que acabo de desinstalar
Tuve que dejar las citas adicionales usando msysGit en Windows 7, no estoy seguro de por qué.
git config --global merge.tool p4merge
git config --global mergetool.p4merge.cmd ''p4merge $BASE $LOCAL $REMOTE $MERGED''
Uso una aplicación llamada WinMerge ( http://winmerge.org/ ) información de su manual ( http://manual.winmerge.org/CommandLine.html )
este es el script bash que uso de la directiva .gitconfig
través de .gitconfig
#!/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"
Básicamente, bash se toma en cuenta cuando aparece el resultado de la diferencia en un archivo vacío y crea un nuevo archivo temporal en la ubicación correcta.
la configuración de mergetool.p4merge.cmd ya no funcionará ya que Git ha comenzado a tratar de admitir p4merge, vea libexec / git-core / git-mergetool--lib.así que solo necesitamos especificar la ruta de acceso de mergetool para git;
git config --global mergetool.p4merge.path ''C:/Program Files/Perforce/p4merge.exe''
git config --global merge.tool p4merge
Entonces funcionará.
git mergetool
es totalmente configurable, por lo que puedes elegir tu herramienta favorita.
La documentación completa está aquí: http://www.kernel.org/pub/software/scm/git/docs/git-mergetool.html
En resumen, puede establecer un mergetool predeterminado configurando la variable de configuración del usuario merge.tool
.
Si la herramienta de combinación es una de las admitidas de forma nativa, solo tiene que configurar mergetool.<tool>.path
a la ruta completa de la herramienta (reemplace <tool>
por lo que ha configurado merge.tool
.
De lo contrario, puede configurar mergetool.<tool>.cmd
para que se evalúe un poco de shell en el tiempo de ejecución con las variables de shell $BASE, $LOCAL, $REMOTE, $MERGED
configuradas en los archivos correspondientes. Debe tener un poco de cuidado con el escape, ya sea que edite directamente un archivo de configuración o establezca la variable con el comando git config
.
Algo como esto debería darte el sabor de lo que puedes hacer (''mymerge'' es una herramienta ficticia).
git config merge.tool mymerge
git config merge.mymerge.cmd ''mymerge.exe --base "$BASE" "$LOCAL" "$REMOTE" -o "$MERGED"''
Una vez que haya configurado su herramienta de combinación favorita, es simplemente una cuestión de ejecutar git mergetool
siempre que tenga conflictos para resolver.
La herramienta p4merge de Perforce es una muy buena herramienta de combinación independiente.