How can I use Beyond Compare 3 as the diff3-cmd for svn?

前端 未结 5 1346
南笙
南笙 2021-02-14 14:24

I saw this posting which explained how to get BC3 working as the diff tool for Subversion... but what about using Beyond Compare 3 to do 3-way merge/compares?

5条回答
  •  后悔当初
    2021-02-14 14:55

    To do this, create a batch file called (for example) diff3wrap.bat, and setup your diff3-cmd in your SVN config to point at it.

    The following diff3wrap.bat file will do the job. It creates a temporary filename for the merge output and deletes it after returning the merged contents back to 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
    

提交回复
热议问题