2014-02-07 84 views
4

我使用Git 1.8.4和Linux(Kubuntu 13.10)。Git目錄差異不起作用在我的子模塊

我有一個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?

UPDATE:1.8.5.3產生相同的輸出

+0

「1.8.5.3產生相同的輸出」:那麼它看起來像一個bug。該difftool功能的最後一個修復是https://github.com/git/git/commit/32eaf1de7f79c4ba09f3de3261c84e52e0a67af5(git 1.8.3.2) – VonC

+0

我發送了一個錯誤報告與此SO鏈接提到[email protected]提到在你的答案http://stackoverflow.com/a/10733251/337621。謝謝。 –

+0

好的。我會期待他們的回答。 – VonC

回答

4

此解決方案對我的作品:

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 
+0

我會盡快嘗試一下。感謝你的回答。 –

+0

嗯。你的解決方案有效謝謝 –