Git忽略和Maven目标

135

有人知道在由git管理的文件结构中是否可以忽略特定目录的所有实例吗。

我想要排除一个包含多个子模块的maven项目中的所有'target'文件夹。我知道我可以在顶层的.gitignore文件中显式地排除每个'target'文件夹,但我真的很希望能够指定一个类似于**/target/*的模式,以便自动忽略子目录中的实例。

这可能吗?


你是用什么配置让这个工作的?*/.settings/只会忽略'xxx/.settings/',而不是'.settings/'或者'xxx/yyy/.settings/': 忽略模式似乎不会被递归应用。另请参见https://dev59.com/rXNA5IYBdhLWcg3wa9Gp。 - VonC
7个回答

241
在根目录下的.gitignore文件确实适用于所有子目录。我的文件内容如下:
.classpath
.project
.settings/
target/

这是一个多模块的Maven项目。所有子模块都使用m2eclipse作为单独的Eclipse项目导入。我没有更多的.gitignore文件。实际上,如果你查看gitignore手册页面

.gitignore文件中读取的模式 在与路径相同的目录中,或者在任何父目录中...

所以这对你应该有效。


5
这是比“*/target/*”更好的答案。它可以排除树状目录中任何位置的目录,但对于文件不起作用(详见 https://dev59.com/rXNA5IYBdhLWcg3wa9Gp )。 - VonC
3
如果您继续阅读,它会说“这些模式是相对于.gitignore文件的位置进行匹配的。” 您的答案是错误的。 - user1387219
2
我使用这种方法并使用“target /”来忽略所有maven构建文件夹,但是要小心,您可能会冒着忽略路径中包含“target”文件夹的包中位于的代码的风险。(在具有以下类的项目中:src/main/java/org/example/game/archery/bow/LongBow.javasrc/main/java/org/example/game/archery/target/Target.java,如果使用此.gitignore配置,则您将找不到任何东西可以用长弓射击 :-) ) - Cristiano Costantini

116

.gitignore文件中可以使用模式匹配。请参阅gitignore手册页。模式*/target/*应忽略任何名为target的目录及其下的所有内容。或者您可以尝试使用*/target/**来忽略target目录下的所有内容。


4
谢谢!以下是针对.gitignore文件的内容,用于跳过通常出现的Maven和Eclipse相关的文件。target/* /target/ .metadata *tar.gz .classpath .project /.settings/ - sgargan
3
你使用了什么配置使得它运行?*/.settings/* 仅会忽略 'xxx/.settings/',而不是 '.settings/' 或 'xxx/yyy/.settings/*':忽略模式似乎并没有被递归应用。详见 https://dev59.com/rXNA5IYBdhLWcg3wa9Gp 。 - VonC
7
对于多模块项目,您可能希望使用 _**/target/_,但要小心不要将源代码中合法的 “target” 目录排除在外。 - Bogdan
1
/target/**\.git\info\exclude 文件中同样有效。 - Abhijeet
刚试图提交一个Java项目,其中一个模块中有“target”子包。 :( - okutane

5

正如Abhijeet在评论中指出的那样,您只需添加以下行:

/target/**

要在\.git\info\文件夹中排除文件。

如果你想要从远程仓库中删除target 文件夹,你需要先手动从本地仓库中删除这个文件夹,然后进行提交并推送。这是因为Git会首先将目标文件夹的内容显示为已修改。


4

在.gitignore文件中添加以下内容,忽略所有不需要的文件

/target/
*/target/**
**/META-INF/
!.mvn/wrapper/maven-wrapper.jar

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
/nbproject/private/
/build/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/

2

我忽略了目标文件夹中的所有类文件,从git中排除它们。在打开的.gitignore文件中添加以下行:

/.class

或者

*/target/**

对我来说,这完美地起作用了。你也可以试试。


0
对于 Spring Tool Suite,请将以下忽略资源添加到 .gitignore 文件中并提交到代码库。
*.classpath
*.class
*.prefs
*.jar
*.lst
*.project
*.factorypath
*.original
target/
.settings/
.apt_generated
.sts4-cache
.springBeans

0
对于多模块仓库,除了 @Gleidosn 的回答之外,我还想补充以下表达来考虑嵌套的目标文件夹:
**/target/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接