Git Directory Diff在我的子模块中不起作用

时间:2014-02-07 08:50:23

标签: git git-submodules git-diff meld

我使用的是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产生相同的输出

1 个答案:

答案 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