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

Gáb*_*ták 4 git git-diff meld git-submodules

我正在使用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
Run Code Online (Sandbox Code Playgroud)

你有什么主意吗?可能是Git Bug吗?

更新:1.8.5.3产生相同的输出

cdy*_*n37 5

此解决方法适用于我:

GIT_WORK_TREE="$(git rev-parse --show-toplevel)" GIT_DIR="$(git rev-parse --git-dir)" git difftool --tool=meld --dir-diff
Run Code Online (Sandbox Code Playgroud)

您当然可以根据您的示例放入--cached.

这是非常多的类型,所以你可以添加以下别名~/.gitconfig:

[alias]
    submeld = !git --work-tree "$(git rev-parse --show-toplevel)" --git-dir "$(git rev-parse --git-dir)" difftool --tool=meld --dir-diff
Run Code Online (Sandbox Code Playgroud)