2011-02-02 29 views
5

Siento que me estoy equivocando.¿Cómo resolver conflictos al fusionar y actualizar archivos en git?

Trabajo como parte del equipo y utilizamos git. Ahora, cuando saco actualizaciones de mi equipo, obviamente hay conflictos de vez en cuando: git parece insertar montones de texto en los archivos, lo que no es bueno.

De todos modos, hay una forma decente de gestionar estos conflictos (estoy en Windows).

Utilicé winmerge, pero por lo que puedo ver, solo puede comparar 2 directorios. Hace que la resolución de conflictos sea fácil, pero requiere que tenga 2 estados de la fuente en 2 ubicaciones diferentes.

¿Alguien sabe una mejor manera de hacer esto o cómo integrar los dos?

Respuesta

5

Puede definir un mergetool para Git que se lanza para cada archivo en conflicto. Esto funciona bien si solo tienes un pequeño número de conflictos. Algunos enlaces: Using Beyond Compare, discussion about this on SO, more general instructions y man page.

Hay algunos paquetes de scripts que se pueden usar si tiene muchos cambios.

Básicamente lo que debe hacer es obtener, p. Más allá de comparación para trabajar en Linux:

git config --global merge.conflictstyle=diff3 
git config --global merge.tool=bc3 
git config --global mergetool.bc3.cmd=/usr/bin/bcompare $LOCAL $REMOTE $BASE $MERGED 
git config --global mergetool.bc3.trustexitcode=true 

Usted puede encontrar información sobre otras herramientas fácilmente, y Git ya cuenta con el apoyo de varias herramientas.

+0

Esto es bueno también: http://blog.wuwon.id.au/2010/09/painless-merge-conflict-resolution-in.html – Ben

+0

Está mezclando el uso del soporte integrado para BC3 con la configuración genérica para cualquier herramienta de fusión. * O * usa 'merge.tool = bc3' y, si' bcompare' no está en su 'PATH', también' mergetool.bc3.path =/usr/bin/bcompare' (no hay argumentos de línea de comandos aquí). * O * usa 'mergetool.bc3.cmd' (con ruta completa y argumentos como en su ejemplo) y especifica configuraciones adicionales como' mergetool.bc3.trustexitcode = true'. – sschuberth

0

He aquí una pregunta relacionada con las respuestas que también pueden ayudar:

Git on Windows: How do you set up a mergetool?

He ido personalmente por p4merge (gratis), con la siguiente configuración (que funciona para mí, puede que no sea la forma 'correcta' de hacer las cosas):

en C:\Program Files\Git\cmd, tengo un archivo git-merge.sh que se parece a esto:

#!/bin/sh 

# Passing the following parameters to mergetool: 
# local base remote merge_result 

base=$1 
alocal=$2 
remote=$3 
result=$4 

if [ -f $base ] 
then 
    p4merge.exe -dl "$base" "$alocal" "$remote" "$result" 
else 
    p4merge.exe -dl "$result" "$alocal" "$remote" "$result" 
fi

En mi C:\Documents and Settings\me.gitconfig contiene la siguiente sección:

[merge]  
    keepBackup = false 
    tool = p4merge 
[mergetool "p4merge"] 
    cmd = \"c:/Program Files/Perforce/p4merge.exe\" \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\" 
    keepTemporaries = false 
    trustExitCode = false 
    keepBackup = false 
    path = C:/Program Files/Perforce/p4merge.exe 
[mergetool] 
    keepBackup = false 
Cuestiones relacionadas