我们在包含多个Java项目的Eclipse工作区中拥有Eclipse RCP应用程序的代码。我们正在使用Mercurial和一个简单的.hgignore * .class(但同样的问题与Git有关)。
即使对代码进行少量更改也可能导致.metadata中的许多文件发生变化。
我想从版本控制中排除部分或全部.metadata。如果我们完全排除它,工作区就会丢失。
有谁知道我们可以安全地排除什么?或者,如果我们将代码下载到新计算机,我们如何重新创建呢?
答案 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)
我个人知道的文件是:
在某个地方,我有一个Eclipse工作区用于测试一些与Eclipse相关的工具,这些工具相当严重,但是很有效。我会看看能不能把它挖出来。
答案 3 :(得分:4)
工作区元数据确实不应保留在源代码管理中。可以通过team project set共享基本工作区配置。
答案 4 :(得分:4)
我经常保留.project和.classpath,它们不仅对git安全而且有用。
.class和.settings在我的gitignore中。这些是分别生成和个人特定的。