代码之家  ›  专栏  ›  技术社区  ›  oz10

如何将Beyond Compare 3用作svn的diff3 cmd?

  •  10
  • oz10  · 技术社区  · 17 年前

    this

    5 回复  |  直到 9 年前
        1
  •  8
  •   liamf    16 年前

    为此,创建一个名为(例如)diff3wrap.bat的批处理文件,并在SVN配置中设置diff3 cmd以指向它。

    @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
    
        2
  •  4
  •   abatishchev Karl Johan    15 年前

    我喜欢liamf的批处理文件,但我认为它可能需要稍作调整:

    因此,这条线变成了:

    %DIFF3% /automerge /reviewconflicts /lefttitle=%MYTITLE% /centertitle=%OLDTITLE% /righttitle=%YOURTITLE% /outputtitle="Merge Output" %MINE% %YOURS% %OLDER% %OUTPUTFILE% 
    
        3
  •  1
  •   Larry Fix    17 年前

    我只有BC3和TFS的经验,所以对此持保留态度。三向合并是我唯一遇到问题的功能。我不止一次不得不在BC3中手动复制和粘贴更改以完成合并。

        4
  •  1
  •   Mike Miller    14 年前

    这是适用于svn 1.6的liamf脚本的linux版本。

    #!/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
    
        5
  •  1
  •   Christopher    14 年前

    这是一 小型的 UNIX 模拟环境 颠覆1.7

    #!/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;