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

Iri*_*fer 37 java eclipse git mercurial rcp

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

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

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

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

Ada*_*erg 51

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

Eclipse忽略在这里:https://github.com/github/gitignore/blob/master/Global/Eclipse.gitignore

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

  • 一个很棒的项目!这个特别的忽略列表有两个问题,一个是它忽略了一些你肯定想要检查的东西,比如.classpath,另一个是它是关于项目目录中的东西,而OP想要检查一个整个工作区.如果您将该列表应用于工作区,它(我认为)将忽略整个.metadata目录,这将丢失一些非常重要的事情,如项目.location文件.但实际上,问题在于Eclipse,它以非常无益的方式混合了权威文件和派生文件. (6认同)

lan*_*oxx 32

元数据和工作区

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

|-- workspace/
|  \-- .metadata/
|  |-- yourProjectOne/
|  |  \-- .git/
|  |  |-- .project
|  |  |-- src/
|  |  |-- ...
|  |-- yourProjectTwo/
|  |  \-- .git/
|  |  |-- .project/
|  |  |-- src/
|  |  |-- ...
Run Code Online (Sandbox Code Playgroud)

具体项目

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

Eclipse文档状态以下有关.project文件:

此文件的目的是使项目自我描述,以便可以在另一个工作区中正确地重新创建已压缩或发布到服务器的项目.

和:

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

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

Maven的

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

没有Maven

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

在克隆了git存储库后,您只需使用Import - >"Workspace from Workspace"eclipse将尊重该.project文件,但会重新创建.classpath.settings/文件.导入后,您需要手动从Eclipse配置类路径(并且每次您的团队想要使用另一个库时).

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

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

  • 非常有用的指导。我很困惑为什么所有 gitignore 文件都包含 .project。但是在您的指示之后,我决定共享 .project。 (2认同)

Tom*_*son 15

我个人都知道的文件是:

  • version.ini(不是很令人兴奋)
  • .plugins/org.eclipse.jdt.core/variablesAndContainers.dat(类路径变量)
  • .plugins/org.eclipse.core.resources/.projects/*/.location(工作空间中的项目)

在某个地方,我有一个Eclipse工作区用于测试一些与Eclipse相关的工具,这些工具被严重削减,但是有效.我会看看我是否可以把它挖出来.