1

我正在尝试使用 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 支持此路径?据我所知,我正在正确地逃离路径..

4

1 回答 1

1

创建一个将启动 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等中将有引号,因此不要在批处理文件中添加另一组引号。

于 2015-01-19T01:36:15.037 回答