Java 如果使用Maven,是否应该忽略VCS中特定于Eclipse的文件?

Java 如果使用Maven,是否应该忽略VCS中特定于Eclipse的文件?,java,eclipse,git,maven,gitignore,Java,Eclipse,Git,Maven,Gitignore,我知道为什么不将特定于Eclipse/IDE的文件提交到像Git这样的VCS中(我实际使用的是Git)。这就是我使用Maven并让它为您生成这些文件,而不是让它们处于版本控制之下的原因之一 但是我想知道,这些文件是否应该在由VCS/Git控制的.gitignore中忽略: .classpath .project .settings/ target/ 这样行吗 既然.gitignore文件本身成为某种特定于IDE的文件,那么它的优缺点是什么呢?有什么最佳实践吗?通常.project和.setti

我知道为什么不将特定于Eclipse/IDE的文件提交到像Git这样的VCS中(我实际使用的是Git)。这就是我使用Maven并让它为您生成这些文件,而不是让它们处于版本控制之下的原因之一

但是我想知道,这些文件是否应该在由VCS/Git控制的.gitignore中忽略:

.classpath
.project
.settings/
target/
这样行吗


既然.gitignore文件本身成为某种特定于IDE的文件,那么它的优缺点是什么呢?有什么最佳实践吗?

通常.project和.settings/应该对likley进行版本控制并忽略

.classpath和目标不应进行版本控制,而应忽略

这是首次在签出实践中启动

i、 e

  • 您告诉everone使用四个空格作为选项卡,此信息存储在.settings/xxx下
  • 但是您不限制他们在哪里安装tomcat/jdk(存储在.classpath下)

好吗?

在我工作过的团队中,一般规则是不签入Maven生成或获得的任何内容。由于pom.xml包含创建.project、.classpath和.settings文件所需的所有内容,因此我们不签入它们

My.gitignore始终包含Maven项目的.classpath、.settings、.project和target

编辑:正如我在下面的评论中提到的,这里有另一个建议:如果您真的想避免在.gitignore中包含Maven或IDE特定的条目


我同意不将IDE文件置于版本控制之下,这有时会引起各种各样的麻烦,正如您提到的,使用maven使这变得不必要,因为任何开发人员都可以从POM导入项目并开始工作

如果这些文件没有放在.git文件中,它们很容易被错误地签入

此外,我没有发现在.gitignore中列出它们是特定于IDE的,如果您的团队成员混合使用不同的IDE,您可以在同一个.gitignore中列出eclipse、IntelliJ IDEA和Netbeans的项目文件。随着时间的推移,您可能会积累一个template.gitignore,它会忽略团队中使用的所有IDE中的项目文件,以便在创建新存储库时使用

如果您完全反对将它们放在项目中。gitignore您可以将它们放在users.gitignore中,但在我看来这有点宽松,因为它取决于各个开发机器是否正确配置,而且这些需要维护以与任何新添加保持同步

编辑:我目前有一个等效的.hgignore,相同的概念不同的语法,我将它转换为git,作为这样一个.gitignore文件的示例

/target/
/bin/
/build/
/.classpath
/.project
/.settings/
/.checkstyle
/atlassian-ide-plugin.xml
/.idea/
/*.iml
/*.ipr
/*.iws
*.orig
*.swp
*~

我从以下文章中获得信息:

这意味着您可以创建一个全局gitignore文件(在~/.gitignore\u global下建议),其中包含.project等内容。由于该文件位于repo之外,因此不会显示

使用以下命令将其注册为全局忽略文件:

git config --global core.excludesfile ~/.gitignore_global

或者,您可以通过签入.gitignore在.git/info/exlude文件中创建每个repo未跟踪的gitignore条目

,正如您在我的问题中所描述和指出的那样,您确实间接签入了Maven生成的文件的数据。您认真考虑过了这一点。我的意思是你不想签入Maven生成的任何东西。(另外,my.gitignore不是由Maven生成的。)在.gitignore文件中放入特定于IDE的文件、输出文件夹以及任何您不希望签入的内容都没有错。事实上,这就是它的全部要点。但是,如果您真的不想在.gitignore中包含特定于IDE或Maven的排除,那么您可以尝试输入否定项,以仅指定要签入的内容。我自己从来没有这样做过,但是你可以在.gitignore中添加*以忽略所有内容,然后添加以开始的行!要列出异常[意味着这些条目确实被签入。]我将选择此答案并将我的.gitignore更改为以下内容:
*!src!pom.xml!。gitignore
我不知道自给出原始答案以来,这是否发生了变化,但在这篇评论中,为了不包含任何子文件夹(例如
src
文件夹),您需要以
/*
开始文件,而不仅仅是
*
。例如:
/*!。别理我!盖德,格雷德尔!src/
您能提供这样的模板吗?gitignore?谢谢。与公认的答案相比,.gitignore看起来更复杂,需要更多的维护。想象一下,Maven支持一个新的IDE,您需要修改所有分支中所有项目的所有.git文件,供使用它的开发人员使用。我从来没有听说过版本控制和忽略文件。这有什么影响?我认为版本控制设置对任何人都没有帮助。根据您使用的插件的不同,可能会有任何内容(缓存、机器甚至文件系统相关的东西,…),所以我会一直忽略这些内容。我想让eclipse来管理这些,是的,我需要一种方法来重新创建它们。@SimonseOrcer您可以强制下载一次,而不必上传。此实践用于告诉新来者项目需要什么样的绑定。这些新来者将无法提交他们的配置@PeterRader我认为这是一个不同的用例,但同时也是我遇到的另一个问题的答案(我想对于更改这个“新来者”——您暂时需要更改的模板。gitignore)。所以谢谢你指出这一点。@PeterRader我试过了,但不幸的是,这不起作用。Git询问如果文件发生更改,是否提交一个被忽略且版本控制的文件。但这是离题的,我在哪里可以找到有关这方面的信息?
git config --global core.excludesfile ~/.gitignore_global