使用git difftool调用VSCode暂存选区时生成新文件如何解决?
问题根因
你当前遇到的问题是git调用difftool时传入的$LOCAL和$REMOTE均为git生成的临时文件,存储在系统临时目录中,和你本地仓库的原文件没有路径关联。此时你在对比窗口中执行暂存操作时,VS Code无法识别到当前仓库的.git目录,也无法将临时文件的改动映射回原仓库文件,就会把临时文件识别为新的未跟踪文件加入暂存区。而手动打开VS Code进入项目目录时,VS Code会加载项目根目录下的.git信息,所以可以正常关联文件完成暂存。
你现有的merge相关配置无需修改,可以正常使用。
可行解决方案
提供两种经过验证的处理方式,可根据使用习惯选择:
方案1:修改git difftool配置,解决路径关联问题
替换你现有的diff相关配置,直接运行以下两条git命令完成全局配置更新:
git config --global diff.tool vscode git config --global difftool.vscode.cmd 'code --wait --new-window --diff $LOCAL $REMOTE' git config --global difftool.vscode.trustExitCode true
修改完成后执行git difftool弹出的对比窗口中,修改后保存的内容会直接同步到原仓库文件,你可以选择两种暂存方式:
- 关闭对比窗口后回到终端执行
git add 原文件路径完成暂存 - 若要在VS Code中直接暂存,可在弹出的对比窗口左上角点击「打开工作区」,选择当前项目的根目录,此时VS Code会加载仓库信息,就可以正常使用暂存功能
方案2:调整操作习惯,避开临时文件映射问题
你已经验证过手动打开VS Code进入项目目录操作是正常的,后续如果需要对改动进行对比、修改、暂存操作,可以直接在项目根目录执行code .打开项目,直接使用VS Code内置的源代码管理面板的diff功能,无需通过git difftool启动对比窗口。
内容的提问来源于stack exchange,提问作者Michal Cicatka
相关产品推荐
相关产品推荐

