我使用的是Git 1.8.4和Linux(Kubuntu 13.10)。
我有一个带子模块的Git存储库。如果我在主Git模块中请求目录差异,它可以正常工作。如果我在其中一个子模块中执行相同操作,则会出现错误:
~/Projects/MAINMODULE/platform/SUBMODULE [master]$ git difftool -tool=meld --dir-diff --cached
fatal: Could not switch to '../../../../platform/': No such file or directory
diff --raw --no-abbrev -z --cached: command returned error: 128
~/Projects/MAINMODULE/platform/SUBMODULE [master]$ cd ..
~/Projects/MAINMODULE/platform [master]$ cd ..
~/Projects/MAINMODULE [master]$ git difftool -tool=meld --dir-diff --cached
// NO PROBLEM, works.
~/Projects/MAINMODULE [master]$ git version
git version 1.8.4
你知道吗?可能是Git Bug吗?
更新:1.8.5.3产生相同的输出
答案 0 :(得分:5)
此解决方法适用于我:
GIT_WORK_TREE="$(git rev-parse --show-toplevel)" GIT_DIR="$(git rev-parse --git-dir)" git difftool --tool=meld --dir-diff
你当然可以根据你的例子加入--cached。
输入的内容非常多,因此您可以为~/.gitconfig
添加以下别名:
[alias]
submeld = !git --work-tree "$(git rev-parse --show-toplevel)" --git-dir "$(git rev-parse --git-dir)" difftool --tool=meld --dir-diff