2009-06-22 13 views

Respuesta

8

Para hacer esto, cree un archivo por lotes llamado (por ejemplo) diff3wrap.bat, y configure su diff3-cmd en su configuración de SVN para apuntar a él.

El siguiente archivo diff3wrap.bat hará el trabajo. Crea un nombre de archivo temporal para la salida de fusión y lo elimina después de devolver los contenidos fusionados a SVN.

@ECHO OFF 

SET DIFF3="C:\Program Files\BeyondCompare3\BComp.exe" 

REM Subversion provides the paths we need as the last three parameters 
REM These are parameters 9, 10, and 11. 
REM Suitable titles for these three panes in the merge tool are in parameters 4, 6 and 8 respectively. 


REM But we have access to only nine parameters at a time, so we shift our nine-parameter window 
REM twice to let us get to what we need, thus changing the effective positions of the various parameters. 
REM 
SHIFT 
SHIFT 
SET MYTITLE=%2 
SET OLDTITLE=%4 
SET YOURTITLE=%6 
SET MINE=%7 
SET OLDER=%8 
SET YOURS=%9 
SET OUTPUTFILE=%OLDER%_%RANDOM%.merge 

REM Call BeyondCompare to perform the actual merge 
REM Note we give it a temporary output file and echo the output back out for SVN to use as the merged file 
%DIFF3% /lefttitle=%MYTITLE% /centertitle=%OLDTITLE% /righttitle=%YOURTITLE% /outputtitle="Merge Output" %MINE% %YOURS% %OLDER% %OUTPUTFILE% 

if NOT %errorlevel% == 0 goto :mergenotcomplete 

REM Merge complete. Echo the output to stdout for SVN to pick up as the result, then throw away the temporary file 

TYPE %OUTPUTFILE% 
del /f /q %OUTPUTFILE% 
exit 0 

:mergenotcomplete 
exit 1 
+0

En base a lo que dijo el SVN Redbook sobre esto, parece correcto ... Aceptaré la respuesta tan pronto como llegue a verificarlo. – paxos1977

+0

Acabo de probarlo y funciona (una vez que reemplaza la línea DIFF3 establecida con la ruta de instalación correcta para su caja). –

1

Solo tengo experiencia con BC3 y TFS, así que tómenlo con un grano de sal. La combinación de 3 vías fue la única característica con la que tuve problemas. Más de una vez tuve que copiar y pegar los cambios a mano en BC3 para finalizar la fusión.

+1

utilizo BC3 través de tortuga en Windows. Puedo decir que las decisiones que BC3 hace son consistentemente más precisas que Tortoise o la propia cli SVN. También creo perfiles personalizados para ciertos tipos de archivos/patrones que deseo anular los valores predeterminados. –

4

me gusta archivo por lotes de liamf, pero creo que podría tomar un pequeño ajuste:

He añadido AutoMerge y reviewconflicts a la invocación de mandato, por lo que en caso de una fusión sin conflictos sólo cierra sin intervención: la interfaz de usuario solo emergerá para revisar conflictos.

Por lo tanto, la línea en cuestión se convierte en:

%DIFF3% /automerge /reviewconflicts /lefttitle=%MYTITLE% /centertitle=%OLDTITLE% /righttitle=%YOURTITLE% /outputtitle="Merge Output" %MINE% %YOURS% %OLDER% %OUTPUTFILE% 
+0

Buena mejora ... He tomado esto en mi script de fusión BC3 estándar. ¡Gracias! – liamf

1

Aquí está una versión de Linux del guión de liamf que funciona con SVN 1.6.

#!/bin/bash 

MYTITLE=$4 
OLDTITLE=$6 
YOURTITLE=$8 
MINE=$9 
OLDER=${10} 
YOURS=${11} 
OUTPUTFILE=${MINE}.merge 

/usr/bin/bcompare -solo -automerge -force -reviewconflicts -favorleft -lefttitle=$MYTITLE -centertitle=$OLDTITLE -righttitle=$YOURTITLE -outputtitle=$OUTPUTFILE $MINE $YOURS $OLDER $OUTPUTFILE 

RESULT=$? 

if [ $RESULT -eq 0 ] ; then 
    cat $OUTPUTFILE 
    exit 0 
else 
    exit 1 
fi 
1

Aquí hay una Cygwin escritura del golpe que trabaja con Subversion 1.7 tanto para diff-cmd y diff3-cmd

#!/bin/bash 
# Set path to BeyondCompare 
bcomp=~/bin/bcomp; 

function bcerrlvl() { 
    echo -en "$1\t"; 

    case $1 in 
      0) echo "Success";; 
      1) echo "Binary same";; 
      2) echo "Rules-based same";; 
     11) echo "Binary differences";; 
     12) echo "Similar";; 
     13) echo "Rules-based differences";; 
     14) echo "Conflicts detected";; 
     100) echo "Error";; 
     101) echo "Conflicts detected, merge output not saved";; 
      *) echo "Error";; 
    esac; 

    return $1; 
} 

if [ "$1" = "-u" ]; 
then 
    # paths 
    left=$(cygpath --dos "$6"); 
    right=$(cygpath --dos "$7"); 

    # titles 
    titleleft="$3"; 
    titleright="$5"; 

    # compare command 
    $bcomp -title1="$titleleft" -title2="$titleright" "$left" "$right"; 

    if [ $? -gt 0 ]; 
    then 
     bcerrlvl $?; 
     exit $?; 
    else 
     exit 0; 
    fi; 
elif [ "$1" = "-E" ]; 
then 
    # Get to the tenth and eleventh arguments 
    shift; shift; 

    # paths 
    centre=$(cygpath --dos "$7"); 
    left=$(cygpath --dos "$8"); 
    right=$(cygpath --dos "$9"); 
    outext="_$(date +%s)-$RANDOM.merge"; 
    output="$(cygpath --dos "$8")_$outext"; 

    # titles 
    titlecentre=$2; 
    titleleft=$4; 
    titleright=$6; 
    titleoutput="Merge Output"; 

    # compare command 
    $bcomp -title1="$titleleft" -title2="$titleright" -title3="$titlecentre" \ 
     -outputtitle="$titleoutput" -automerge -reviewconflicts \ 
     "$left" "$right" "$centre" "$output"; 

    if [ $? -eq 0 ]; 
    then 
     outfile=$(cygpath --unix "$output"); 
     cat $outfile 
     rm -f $outfile 
     exit 0; 
    else 
     bcerrlvl $?; 
     exit $?; 
    fi; 
fi; 
Cuestiones relacionadas