git difftool突然停止工作/如何排除故障?
我已将我的git difftool突然停止工作/如何排除故障?,git,winmerge,Git,Winmerge,我已将我的git difftool设置为使用winmerge。它已经工作了很长一段时间了。但今天它突然停止了工作git difftool用于逐个调用脏文件上的winmerge,但不是今天。命令刚刚返回,好像什么也没发生。没有错误消息 我仔细检查了一下,确实有几个脏文件(如git status所示) 有没有关于如何解决问题的建议?谢谢 已更新 谢谢fabspro的建议。我取得了一些进步,但仍然 未能解决该问题 我最初将winmerge设置为difftool(在我的~/.gitconfig文件中):
git difftool
设置为使用winmerge
。它已经工作了很长一段时间了。但今天它突然停止了工作git difftool
用于逐个调用脏文件上的winmerge
,但不是今天。命令刚刚返回,好像什么也没发生。没有错误消息
我仔细检查了一下,确实有几个脏文件(如git status
所示)
有没有关于如何解决问题的建议?谢谢
已更新
谢谢fabspro的建议。我取得了一些进步,但仍然
未能解决该问题
我最初将winmerge
设置为difftool
(在我的~/.gitconfig
文件中):
现在我明白了,这将指导git difftool
使用脚本
C:\Program Files\Git\mingw64\libexec\git-core\mergetools
在我的电脑上。我将在下面展示这个脚本的内容。
我相信里面的东西都很好,因为没人碰它,而且
它在今天之前就开始工作了
然后我还尝试直接调用WinMerge
,所以我改变了
~/.gitconfig
中的指令将对此
[diff]
tool = mywinmerge
[difftool "mywinmerge"]
cmd = "\"C:/Program Files (x86)/WinMerge/WinMergeU.exe\" \"$LOCAL\" \"$REMOTE\""
这个想法来源于这样一个答案:
我仔细检查了路径,我也检查了
mygit bash
I
可以直接调用WinMerge
(无参数--
与上面的配置不同)使用此命令:
$ /c/Program\ Files\ \(x86\)/WinMerge/WinMergeU.exe
尽管如此,我还是无法让我的git difftool
命令工作
(昨天还在工作)
还有什么想法吗?谢谢
附录
myC:\Program Files\Git\mingw64\libexec\Git core\mergetools的内容
diff_cmd () {
"$merge_tool_path" -u -e "$LOCAL" "$REMOTE"
return 0
}
merge_cmd () {
# mergetool.winmerge.trustExitCode is implicitly false.
# touch $BACKUP so that we can check_unchanged.
touch "$BACKUP"
"$merge_tool_path" -u -e -dl Local -dr Remote \
"$LOCAL" "$REMOTE" "$MERGED"
check_unchanged
}
translate_merge_tool_path() {
# Use WinMergeU.exe if it exists in $PATH
if type -p WinMergeU.exe >/dev/null 2>&1
then
printf WinMergeU.exe
return
fi
# Look for WinMergeU.exe in the typical locations
winmerge_exe="WinMerge/WinMergeU.exe"
for directory in $(env | grep -Ei '^PROGRAM(FILES(\(X86\))?|W6432)=' |
cut -d '=' -f 2- | sort -u)
do
if test -n "$directory" && test -x "$directory/$winmerge_exe"
then
printf '%s' "$directory/$winmerge_exe"
return
fi
done
printf WinMergeU.exe
}
根据注释中的讨论,可以通过检查基本信息来排除外部工具的故障-工具是否已配置,如果您自己启动它,工具是否工作,工具是否在系统路径中/是否在git配置中配置的工具的正确路径。根据注释中的讨论,对外部工具进行故障排除可以通过检查基本信息来完成-工具是否已配置,如果您自己启动它,工具是否正常工作,工具是否在系统路径中/是否在git配置中配置了正确的工具路径。我找到了答案--问题是错误警报。对不起
发生的事情是,我被git difftool
的确切语义弄糊涂了
与git diff
类似,git difftool
显示工作目录和索引之间的差异,而不是标题。当我运行我的命令时,我已经准备好了我的更改(即,将它们放入索引中),因此虽然与头部有差异,但与索引没有差异,因此命令的静默行为。我应该用来显示diff的命令是git difftool HEAD
而不仅仅是git difftool
我想这个故事的寓意是:
如果git difftool
没有显示任何内容,请尝试git diff
。如果后者
也没有显示任何内容,那么可能没有差异,并且可能没有任何问题,配置git difftool
我想用下面的精彩图片来总结这个答案
从“”可以作为一个好的
提醒注意git diff
vsgit diff HEAD
我找到了答案——问题是虚惊一场。对不起
发生的事情是,我被git difftool
的确切语义弄糊涂了
与git diff
类似,git difftool
显示工作目录和索引之间的差异,而不是标题。当我运行我的命令时,我已经准备好了我的更改(即,将它们放入索引中),因此虽然与头部有差异,但与索引没有差异,因此命令的静默行为。我应该用来显示diff的命令是git difftool HEAD
而不仅仅是git difftool
我想这个故事的寓意是:
如果git difftool
没有显示任何内容,请尝试git diff
。如果后者
也没有显示任何内容,那么可能没有差异,并且可能没有任何问题,配置git difftool
我想用下面的精彩图片来总结这个答案
从“”可以作为一个好的
提醒注意git diff
vsgit diff HEAD
winmerge是否会自动启动?使用您在git配置中配置的命令如何?直接在git bash中运行命令没有启动。错误消息是:bash:winmerge:command未找到
。但我不记得我更改了任何path环境变量。谢谢顺便说一下,我可以在我的git bash
:C:\Program Files\git\mingw64\libexec\git core\mergetools的安装目录中找到winmerge的可执行文件。在我的git配置文件中,我刚刚设置了[diff]tool=winmerge
谢谢!酷,别担心,伙计!如果您自己启动winmerge,它会启动吗?使用您在git配置中配置的命令如何?直接在git bash中运行命令没有启动。错误消息是:bash:winmerge:command未找到
。但我不记得我更改了任何path环境变量。谢谢顺便说一下,我可以在我的git bash
:C:\Program Files\git\mingw64\libexec\git core\mergetools的安装目录中找到winmerge的可执行文件。在我的git配置文件中,我刚刚设置了[diff]tool=winmerge
谢谢!酷,别担心,伙计!谢谢你的建议。我还是被卡住了。我在开始的问题中添加了一些更新的信息。你有更多的想法吗?在我看来,我的gi
diff_cmd () {
"$merge_tool_path" -u -e "$LOCAL" "$REMOTE"
return 0
}
merge_cmd () {
# mergetool.winmerge.trustExitCode is implicitly false.
# touch $BACKUP so that we can check_unchanged.
touch "$BACKUP"
"$merge_tool_path" -u -e -dl Local -dr Remote \
"$LOCAL" "$REMOTE" "$MERGED"
check_unchanged
}
translate_merge_tool_path() {
# Use WinMergeU.exe if it exists in $PATH
if type -p WinMergeU.exe >/dev/null 2>&1
then
printf WinMergeU.exe
return
fi
# Look for WinMergeU.exe in the typical locations
winmerge_exe="WinMerge/WinMergeU.exe"
for directory in $(env | grep -Ei '^PROGRAM(FILES(\(X86\))?|W6432)=' |
cut -d '=' -f 2- | sort -u)
do
if test -n "$directory" && test -x "$directory/$winmerge_exe"
then
printf '%s' "$directory/$winmerge_exe"
return
fi
done
printf WinMergeU.exe
}