我正在尝试使用Tortoise的DiffMerge工具来解决git合并冲突。
我有以下我的.gitconfig:
[diff]
tool = tortoisediff
[difftool]
prompt = false
[merge]
tool = tortoisemerge
[mergetool]
prompt = false
keepBackup = false
[difftool "tortoisediff"]
cmd = \""c:/Program Files/TortoiseGIT/bin/TortoiseGitMerge.exe"\" -mine:"$REMOTE" -base:"$LOCAL"
[mergetool "tortoisemerge"]
cmd = \""c:/Program Files/TortoiseGIT/bin/TortoiseGitMerge.exe"\" -base:"$BASE" -theirs:"$REMOTE" -mine:"$LOCAL" -merged:"$MERGED"
TortoiseGit打开得很好,但是当我尝试处理我的文件时,会得到一个错误:
到达该位置的完整路径如下:
C:\Users\Streamus\Documents\GitHub\StreamusServer\Streamus.Tests\Controller Tests\ErrorControllerTest.cs
是否可以使用Git和TortoiseMerge支持这个路径?据我所知,我正在正确地逃离这条路。
发布于 2015-01-19 01:36:15
创建一个将启动TortoiseMerge的CMD文件:
TortoiseMerge.exe -base:%1 -mine:%2 -theirs:%3 -merged:%4
并在.gitconfig
中设置您的合并工具
[merge]
tool = mytool
[mergetool "mytool"]
cmd = cmd /C tortoiseMerge-git.cmd "$BASE" "$LOCAL" "$REMOTE" "$MERGED"
背景:
Git内部使用Windows版本的sh。如果它启动一个命令,它将正确处理文件名中的空格。如果有必要,包含空格的参数将用引号包装。但我还没有找到一种方法来强迫一个字面上的引语在争论的一半。
TortoiseMerge期望参数看起来如下:-mine:"some path/some file.txt"
。如果-mine也包含在引号中,它将无法工作。
因此,我们可以创建一个批处理文件,它只是将-mine:放在路径前面,但是我们遇到了另一个错误:如果您使用批处理文件作为命令,那么cmd文件将由sh而不是CMD解析,因此我们使用/C开关显式调用cmd来执行命令。
还请注意,在批处理文件中,%1
等将在它们周围有引号,所以不要在批处理文件中添加另一组引号。
https://stackoverflow.com/questions/22232659
复制相似问题