我看到this发布,它解释了如何让BC3作为Subversion的差异工具工作......但使用Beyond Compare 3做3路合并/比较怎么办?如何使用Beyond Compare 3作为svn的diff3-cmd?
10
A
回答
8
为此,创建一个名为(例如)diff3wrap.bat的批处理文件,并在您的SVN配置中设置diff3-cmd以指向它。
以下diff3wrap.bat文件将完成这项工作。它为合并输出创建一个临时文件名,并在将合并的内容返回到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
1
我只有BC3和TFS的经验,所以带上一粒盐。 3路合并是我遇到的唯一问题。不止一次,我必须在BC3中手动复制和粘贴更改以完成合并。
+1
我在Windows上使用BC3通过龟。我可以说,BC3所做出的决定始终比Tortoise或SVN cli本身更为准确。我还为特定的文件类型/模式创建自定义配置文件,以便覆盖默认值。 – 2009-09-08 21:26:31
4
我喜欢liamf的批处理文件,但我认为它可能需要一个小的调整:
我添加automerge和reviewconflicts的命令调用,以便在合并的情况下,不会发生冲突,它只是在没有干预的情况下关闭 - 用户界面只会弹出来审查冲突。
因此,有问题的行变成了:
%DIFF3% /automerge /reviewconflicts /lefttitle=%MYTITLE% /centertitle=%OLDTITLE% /righttitle=%YOURTITLE% /outputtitle="Merge Output" %MINE% %YOURS% %OLDER% %OUTPUTFILE%
1
这里是liamf的脚本,使用svn 1.6工作的一个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
1
这里有一个Cygwin的 bash脚本,与颠覆1.7同时适用于DIFF-CMD和的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;
相关问题
- 1. Git Diff with Beyond Compare
- 2. 如何配置Visual Studio 2012以使用Beyond Compare 3
- 3. 如何在Windows上使用Beyond Compare 3作为外部SVN(SlikSVN)合并和差异化工具?
- 4. Beyond Compare 2忽略情况
- 5. 为什么冲突标记不会在Git mergetool中使用Beyond compare 3消失?
- 6. Eclipse SVN:如何使用Compare With ...分支?
- 7. 在Eclipse中使用Beyond Compare进行Subversion中的合并
- 8. 使用Beyond Compare(Mercurial)解决合并冲突
- 9. 如何让Beyond Compare正确处理.hgtags文件?
- 10. 如何在Beyond Compare 4中设置多个列线(网格线)?
- 11. 如何使Beyond Compare忽略空白,但仍显示注释中的更改
- 12. 在Windows 7 64位上集成Beyond Compare 3与基本清晰版本8?
- 13. 如何仅报告右侧文本与Beyond Compare比较中的差异?
- 14. Beyond Compare忽略所有文件中不重要的差异
- 15. Beyond Compare - 删除不必要的内容(BETWEEN“)
- 16. TFS:自动签出在Beyond Compare中修改的文件
- 17. 忽略解决方案中的文件夹与Beyond Compare比较
- 18. 如何在Beyond Compare中创建特定会话的快捷方式?
- 19. Beyond Compare - 如何在比较时忽略TFS文件的只读标志
- 20. 使用Beyond Compare作为数据文件时,我可以有多个关键标识符吗?
- 21. 使用Beyond Compare 3,如何生成比较两个给定文件夹的报告,并显示使用脚本在每个文件中更改了多少行
- 22. 如何在findOneBy中使用'compare'语句?
- 23. 在Linux上寻找Perforce的差异编辑器,类似于Beyond Compare?
- 24. compareTo和compare比较工作如何?
- 25. Beyond Compare - 如何忽略'这是一个句子'和'这是\ n句子'之间的区别
- 26. 如何使用git-svn作为SVN存储库的中间审查工具?
- 27. 使用vim作为svn的差异
- 28. 如何使用SVN与无法比拟的3
- 29. 如何使用Git svn的
- 30. eclipse + svn:如何使用svn管理整个工作区
根据SVN红皮书对此的看法,这看起来是正确的......我一接受检查就会接受答案。 – paxos1977 2009-09-12 18:20:06
我刚测试过它,它工作正常(一旦你用你的盒子的正确安装路径替换了设置的DIFF3行)。 – 2011-01-14 22:17:59