我可以在Git / Mercurial中安全地忽略Eclipse项目.metadata的内容吗?

时间:2010-11-25 15:27:56

标签: java eclipse git mercurial rcp

我们在包含多个Java项目的Eclipse工作区中拥有Eclipse RCP应用程序的代码。我们正在使用Mercurial和一个简单的.hgignore * .class(但同样的问题与Git有关)。

即使对代码进行少量更改也可能导致.metadata中的许多文件发生变化。

我想从版本控制中排除部分或全部.metadata。如果我们完全排除它,工作区就会丢失。

有谁知道我们可以安全地排除什么?或者,如果我们将代码下载到新计算机,我们如何重新创建呢?

5 个答案:

答案 0 :(得分:51)

GitHub正在维护一个社区“gitignore”项目,该项目针对各种平台,编辑器和语言忽略建议的文件规范:https://github.com/github/gitignore

Eclipse忽略了:https://github.com/github/gitignore/blob/master/Global/Eclipse.gitignore

(如果还有其他文件规格他们应该知道,请告诉他们!)

答案 1 :(得分:30)

元数据和工作区

我永远不会分享.metadata文件夹。事实上,除非你有特殊原因我甚至不会共享工作区文件夹,而是分别用git共享每个项目。这样,.metadata文件夹将始终位于您的git存储库的父文件夹中,您无需考虑是否需要忽略它:

|-- workspace/
|  \-- .metadata/
|  |-- yourProjectOne/
|  |  \-- .git/
|  |  |-- .project
|  |  |-- src/
|  |  |-- ...
|  |-- yourProjectTwo/
|  |  \-- .git/
|  |  |-- .project/
|  |  |-- src/
|  |  |-- ...

专门针对具体项目

您应该始终共享.project文件而不是.settings/个文件。 .classpath可能取决于您的环境,但我也不建议共享它,因为它可能会导致冲突(例如,如果一个用户使用openjdk而另一个使用sun-jdk。.settings包含首选项eclipse的设置和更改很多,因此不应该共享。如果你从git克隆它后正确导入项目,那么你也没有任何问题。

eclipse documentation说明.project文件的以下内容:

  

这个文件的目的是让项目自我描述,所以   一个拉链或发布到服务器的项目可以   在另一个工作区中正确地重新创建。

  

如果在包含现有项目的位置创建新项目   项目描述文件,该描述文件的内容将   被誉为项目描述。一个例外是   如果文件中的项目名称与名称不匹配,则将忽略该名称   正在创建的项目。如果磁盘上的描述文件是   无效,项目创建将失败。

我还建议使用Maven,因为这会为依赖管理和.classpath节省很多问题

<强>的Maven

与Maven项目的主要区别在于您可以将项目导入为Maven-&gt;“现有Maven项目”,因此只需要在git中共享pom.xml和.project文件。然后,Eclipse将自动为您创建.classpath, .settings/个文件。因此显然你不需要分享它们。如果pom.xml中的内容发生了变化,您只需运行Maven-&gt;“更新项目配置”和Maven-&gt;“更新依赖项”。

没有Maven

应该共享.project文件,而不是.settings/文件夹。你可以考虑分享.classpath,但它可能导致如上所述的冲突。我建议不要分享它。使用以下方法导入项目:

克隆git存储库后,您只需使用Import-&gt;“Workspace中的现有项目”,eclipse将尊重.project文件,但会重新创建.classpath.settings/文件。导入之后,您需要手动从Eclipse配置类路径(并且每次您的团队想要使用另一个库时)。

如果您不共享.project文件,则无法使用Eclipse导入项目。您需要先使用项目向导创建一个新项目,然后您可以选择导入“General-&gt; File System”,这会将所有文件复制到您的工作区中。这可能不是您想要的,因为这意味着您无法将git存储库克隆到工作空间中,您必须将其克隆到其他位置,然后从那里导入它。因此,您应始终共享.project文件。

如果您对此解释有任何建议或者您不同意,请留言。我希望这有助于一个或那个。

答案 2 :(得分:15)

我个人知道的文件是:

  • version.ini(不是很令人兴奋)
  • .plugins / org.eclipse.jdt.core / variablesAndContainers.dat(classpath variables)
  • .plugins / org.eclipse.core.resources / .projects / * /。location(工作区中的项目)

在某个地方,我有一个Eclipse工作区用于测试一些与Eclipse相关的工具,这些工具相当严重,但是很有效。我会看看能不能把它挖出来。

答案 3 :(得分:4)

工作区元数据确实不应保留在源代码管理中。可以通过team project set共享基本工作区配置。

答案 4 :(得分:4)

我经常保留.project和.classpath,它们不仅对git安全而且有用。

.class和.settings在我的gitignore中。这些是分别生成和个人特定的。