Windows下Git配置求助:外部合并工具如何生成关联.tbl.flds文件副本
解决Git合并工具中关联.tbl.flds文件的复制问题
项目中存在成对关联的文件:
book.tbl:存储表'book'的核心信息book.tbl.flds:存储表'book'的字段信息
缺少.tbl.flds文件时,对应的.tbl文件无法读取必要信息,导致无法正常使用。需要配置Git外部合并工具,在处理.tbl文件时自动复制对应的.tbl.flds文件到临时目录,确保合并工具能正常工作。
当前配置信息
.gitconfig
[diff] guitool = mergetool_wrapper [difftool "mergetool_wrapper"] prompt = false keepBackup = false keepTemporaries = false name = Merge-wrapper trustExitCode = false cmd = 'MyPath/mergetool_wrapper.bat' \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
mergetool_wrapper.bat
@ECHO OFF :: $LOCAL %1 :: $REMOTE %2 :: $MERGED %3 :: Checking for additional special diff tool cases IF /I "%~x1" == ".tbl" ( MyTool %1 %3 %2 --ext=.tbl ) ELSE ( :: Finally, the default case: WinMerge %1 %2 -u -e -dl \"Local\" -dr \"Remote\" %1 %2 %3 )
解决方案
Git仅会传递目标文件的临时副本路径,不会自动处理关联文件。我们需要修改批处理脚本,在检测到.tbl文件时,自动复制对应的.tbl.flds文件到临时目录。
修改后的mergetool_wrapper.bat
@ECHO OFF :: $LOCAL %1 :: $REMOTE %2 :: $MERGED %3 :: 处理.tbl文件对应的.flds关联文件 IF /I "%~x1" == ".tbl" ( :: 获取LOCAL对应的原.flds文件路径 SET "LOCAL_FLD=%~dpn1.tbl.flds" :: 获取LOCAL临时文件所在目录 SET "LOCAL_DIR=%~dp1" :: 若原.flds存在,复制到临时目录 IF EXIST "%LOCAL_FLD%" ( COPY "%LOCAL_FLD%" "%LOCAL_DIR%" > NUL ) :: 同理处理REMOTE的关联.flds文件 SET "REMOTE_FLD=%~dpn2.tbl.flds" SET "REMOTE_DIR=%~dp2" IF EXIST "%REMOTE_FLD%" ( COPY "%REMOTE_FLD%" "%REMOTE_DIR%" > NUL ) :: 调用MyTool处理.tbl文件 MyTool %1 %3 %2 --ext=.tbl ) ELSE ( :: 默认用WinMerge处理其他文件 WinMerge %1 %2 -u -e -dl "Local" -dr "Remote" %1 %2 %3 )
关键说明
%~dpn1:提取%1(即$LOCAL)的驱动器、路径和文件名(不含扩展名),拼接后得到原.tbl.flds文件的完整路径%~dp1:获取临时.tbl文件所在的目录,将原.tbl.flds复制到该目录,确保MyTool能找到关联文件> NUL:屏蔽复制命令的输出,避免干扰脚本执行流程
内容的提问来源于stack exchange,提问作者sanchi82
相关产品推荐
相关产品推荐

