2011-08-21 89 views
1

我在Windows下,嚴格使用GIT作爲備份系統。GIT diff HEAD中的奇怪行爲

我有我的整個Eclipse工作區。

搜索在網絡上,我發現我需要做到這一點:

Display changes since last commit: 
$ git diff HEAD 

我想了解一些精確Maven插件的目標是做。所以我承諾所有的改變。然後我運行maven命令。然後,我去項目目錄,這是工作區目錄下,並運行

git diff HEAD 

然後,它顯示我的變化對整個工作區的時候,其實一切都沒有改變,除了這個目錄中。如果我將它重定向到一個文件,該文件是157M大!

但是,如果我將一個目錄向上,返回到工作區,並執行相同操作,那麼它只會顯示項目目錄中的更改。這是我所期望的。

所以我的問題是:

1)爲什麼,如果我在一個子目錄去,這表明我的變化,在父目錄發生了什麼?

2)當真的只有這一個變化時,它從哪裏得到157M的變化?

+1

請提供'git status'的輸出 –

+0

如果我在工作區,它會按預期顯示修改後的文件。如果我在任何子目錄下,它會顯示*工作區中的每個文件*爲已修改。就好像它總是將當前目錄與根目錄進行比較,而不是將其與存儲庫中的同一目錄進行比較。 –

+0

這些文件有什麼狀態?也許一些奇怪的設置在你的git配置。還請提供git版本和操作系統 –

回答

1

調用git diff沒有任何地方的git倉庫內的路徑參數將顯示整個存儲庫,不只是當前目錄(這是不同於Subversion的行爲)的差異。

如果你從不同的目錄中git diff HEAD獲得不同的輸出,這意味着你要移動到不同的存儲庫(或者你沒有實際運行確切相同的命令)。

+0

好吧,現在有道理,但如果我使用「。」作爲路徑,它仍然像我沒有給出任何路徑時一樣。如果我使用目錄名稱,那麼它按預期工作,在根目錄或子目錄中,所以它只是「。」。這表現奇怪。 –

+0

這不是我的經驗。 'git diff HEAD'在任何地方都會做整個repo的diff,但'git diff HEAD .'將輸出限制在當前目錄中的東西。 –

+0

好的。得到它了。我有GIT_DIR設置,所以它總是比較CWD和GIT_DIR。 –