我的子模块中 Git 目录比较不起作用

4

我正在使用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.8.5.3 产生相同的输出": 看起来像是一个错误。该 difftool 功能的最后修复版本为 https://github.com/git/git/commit/32eaf1de7f79c4ba09f3de3261c84e52e0a67af5 (git 1.8.3.2)。 - VonC
我已经将带有此SO链接的错误报告发送到您在https://dev59.com/mGgv5IYBdhLWcg3wQ-qd#10733251中回答中提到的git@vger.kernel.org。谢谢。 - Gábor Lipták
好的,我会期待他们的回答。 - VonC
http://git.661346.n2.nabble.com/Fwd-Git-Directory-Diff-for-submodule-td7603302.html - Gábor Lipták
1个回答

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

我会尽快试一下。谢谢你的回答。 - Gábor Lipták

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接