2011-12-26 222 views
25

我有一個maven多模塊項目,其深度大約爲5級。
我現在正在轉移到git,我發現git將「target」文件夾的很多內容作爲「Unstaged Changes」取代。
我GOOGLE了很多,並搜索到,但無法找到一個答案,如何讓git忽略target文件夾的整個目錄樹。
.gitignore,它駐留在項目的根目錄,如下所示:問題忽略git中的子目錄

.project 
.classpath 
.settings/ 
target/ 

奇怪的是,.class文件,其中target樹下的地方居住,就得到由上述定義忽略,但像MANIFEST.MF,pom.properties這樣的文件或我自己的位於target目錄樹某處的應用程序屬性文件不會被忽略。
我讀過Git Ignores and Maven targets,但該解決方案似乎不適用於我。
我也可以說,當我嘗試添加target/*規則時,它不會改變任何內容,並且當我將target/替換爲target/*時,那麼.class文件也會顯示爲未凍結。
我真的很感謝一些指導,因爲對我來說,使用git和maven的人羣還沒有解決類似的問題似乎不太可能。謝謝。

+0

你曾經在'target /'目錄中將這些文件提交到你的倉庫嗎?如果文件已被git跟蹤,將文件添加到'.gitignore'不起作用。 – 2011-12-26 08:19:16

+0

@ KL-7我的合作伙伴進行了初步提交,但實際上聽起來可能是這個問題。我會檢查並回報。如果是這樣,你可以發佈它作爲答案,我會接受。 – Ittai 2011-12-26 08:31:41

回答

49

其中一個原因可能是您已將該文件提交到您的存儲庫。在這種情況下,將它們添加到.gitignore不會阻止git跟蹤這些文件。爲了解決這個問題,你應該首先從庫一樣,將其刪除:

git rm -r target/ 

(如果你的項目有模塊,你需要包含到相關模塊的目標路徑:
git rm -r parent_project/module_name/target/

如果您想從存儲庫中刪除目錄,但不能從磁盤,你可以使用--cached選項:

git rm -r --cached target/ 

在任何情況下,那麼你應該提交該刪除的存儲庫(你如果您願意,可以在target/.gitignore的相同提交中完成)。

+0

對不起noob,但是當我做'git rm -r --cached target /'它只能刪除我的本地倉庫嗎?如果是這樣,那麼我以後需要將本地存儲庫推送到我的遠程存儲庫,對吧? – Ittai 2011-12-26 08:45:08

+0

是的,首先您需要提交更改並推送到遠程存儲庫。 – 2011-12-26 08:46:38

+0

我沒有忘記。我在這個問題上遇到了一些問題,但我認爲這與我目前對git的經驗不足而不是解決方案有關。我會回覆/接受你的答案,一旦我可以。謝謝。 – Ittai 2011-12-26 13:33:16

4
target 
target/* 

在gitignore中添加這些行以忽略目標文件和目標內的所有文件。這不應該跟蹤該文件夾及其內容了。

2

或者,在目標文件夾上使用tortoisegit只需選擇「刪除並添加到忽略列表」。