我正在使用Git 1.8.4和Linux(Kubuntu 13.10)。
我有一个带有子模块的Git存储库。如果我在主Git模块中要求目录diff,它可以正常工作。如果在子模块之一中执行相同的操作,则会收到错误消息:
~/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产生相同的输出
此解决方法对我有效:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句