Mercurial配置Beyond Compare:目录对比右侧设为实际工作目录方法
解决Mercurial目录对比时Beyond Compare右侧使用实际工作目录的问题
方案一:使用Mercurial官方--working-copy选项(推荐)
直接修改mercurial.ini,通过别名让hg bc默认启用工作目录对比模式:
- 保留原有
extdiff扩展配置,新增alias节:
[extensions] extdiff = [extdiff] cmd.bc = C:\Program Files\Beyond Compare 4\BCompare.exe opts.bc = /lro /solo [alias] bc = extdiff --working-copy -p bc
- 保存配置后执行
hg bc:
- 目录对比时,Beyond Compare左侧显示父变更集导出的临时目录,右侧直接指向你的实际工作目录;
- 单个文件对比(
hg bc file1.txt)的行为保持不变,右侧仍为工作目录中的实际文件。
原理说明
--working-copy是Mercurial extdiff扩展的内置选项,它会让Mercurial在目录对比时跳过工作目录的临时副本生成,直接用当前工作目录作为对比右侧。
方案二:使用批处理脚本适配(备选)
如果需要更灵活的自定义逻辑,可以编写批处理脚本作为中间层:
- 创建
bc-wrapper.bat脚本(比如放在C:\Tools目录下):
@echo off REM 判断是否为目录对比:Mercurial目录对比会传递两个无扩展名的临时路径 if "%~x2"=="" if "%~x3"=="" ( REM 目录对比:右侧替换为当前工作目录 "C:\Program Files\Beyond Compare 4\BCompare.exe" /lro /solo "%~1" "%CD%" ) else ( REM 文件对比:直接传递所有参数 "C:\Program Files\Beyond Compare 4\BCompare.exe" /lro /solo %* )
- 修改
mercurial.ini的extdiff配置,指向该脚本:
[extensions] extdiff = [extdiff] cmd.bc = C:\Tools\bc-wrapper.bat opts.bc =
- 保存后执行
hg bc即可实现需求,文件对比行为不受影响。
内容的提问来源于stack exchange,提问作者Ian Anderson
相关产品推荐
相关产品推荐

