是否可以将 TortoiseMerge(与 TortoiseSVN 一起提供)设置为使用“svn merge”命令行遇到合并冲突时弹出的外部合并工具?我尝试将环境变量“SVN_MERGE”设置为指向 TortoiseMerge.exe,但这似乎还不够。TortoiseMerge 只是在我选择“l”(启动外部工具)时弹出,询问我要合并哪些文件。我希望将此信息自动推送到工具中。
有任何想法吗?
是否可以将 TortoiseMerge(与 TortoiseSVN 一起提供)设置为使用“svn merge”命令行遇到合并冲突时弹出的外部合并工具?我尝试将环境变量“SVN_MERGE”设置为指向 TortoiseMerge.exe,但这似乎还不够。TortoiseMerge 只是在我选择“l”(启动外部工具)时弹出,询问我要合并哪些文件。我希望将此信息自动推送到工具中。
有任何想法吗?
创建一个如下所示的 bat 脚本:
"c:\Program Files\TortoiseSVN\bin\TortoiseMerge.exe" /base:"%1" /theirs:"%2" /mine:"%3" /merged:"%4"
然后将 SVN_MERGE 环境变量设置为该 bat 脚本:
set SVN_MERGE=c:\bin\svnmerge.bat
我不知道您使用的是哪个版本的 Subversion,所以我将尝试参考最新版本的Subversion 文档中的信息,即1.6。(他们在该页面上添加了“如果您为特定部分添加书签或链接,这些链接可能会因继续开发而失效。”但 1.6 没有稳定版本。)
首先,坏消息:
要使用合并工具,您需要设置 SVN_MERGE 环境变量或在您的 Subversion 配置文件中定义 merge-tool-cmd 选项(有关详细信息,请参阅“配置选项”部分)。Subversion 将向合并工具传递四个参数:文件的 BASE 修订版、作为更新的一部分从服务器接收的文件修订版、包含本地编辑的文件副本以及文件的合并副本 (其中包含冲突标记)。如果您的合并工具需要不同顺序或格式的参数,您需要编写一个包装脚本供 Subversion 调用。
稍微好一点的消息是,Subversion 在某种程度上已经预料到了你的问题。请参阅使用外部差异和合并工具部分;有外部合并工具包装器的模板。
在您的特定情况下,TortoiseMerge 文档有一个附录解释了如何从命令行使用它。基本开关是/base
、/mine
和/theirs
,但您可能想要使用更多(毕竟您正在编写自己的包装脚本)。TortoiseMerge 还允许命令的“简化形式”:
TortoiseMerge BaseFilePath MyFilePath TheirFilePath
将合并结果传回 Subversion 的方法是将合并的文件写入标准输出并返回适当的值。这些信息放在 Subversion 手册的包装模板中的显着位置。