2011-12-26 220 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只需选择“删除并添加到忽略列表”。