哪些Eclipse文件受版本控制?


242

除了源代码之外,还应该将哪些Eclipse文件置于源代码控制之下?

具体来说,在我的项目中,我想知道:

.metadata / *
project-dir / .project
project-dir / .classpath
project-dir / .settings / *

如果这取决于它们,请解释您的准则。

Answers:


175

不应在源代码管理中管理元数据。它们主要包含与您的工作空间相关的数据。

唯一的例外是.launchXML文件(启动程序定义)。

他们在

[eclipse-workspace]\.metadata\.plugins\org.eclipse.debug.core\.launches

然后将它们复制到您的项目目录中:刷新项目时,这些配置将显示在“运行配置”对话框中。

这样,那些启动参数文件也可以管理到SCM中。

(警告:取消对“当相关资源被删除删除配置”运行 / 启动 / 启动配置偏好面板:这是常见的软删除项目,以导入回来-给力的重新初始化eclipse元数据。但是,如果选中此选项,将删除您的详细启动参数!)

project-dir/.project
project-dir/.classpath
project-dir/.settings/* 

应该在你的供应链管理(尤其是.project.classpath根据Eclipse文档)。

目标是任何人都可以签出/更新其SCM工作区并将Eclipse项目导入Eclipse工作区。

为此,您要使用链接资源仅在.classpath中使用相对路径

注意:最好project-dir引用“外部”项目目录,而不是在Eclipse工作区下创建的目录。这样,两个概念(Eclipse工作区与SCM工作区)就清晰地分开了。


正如ipsquiggle在评论中提到的那样,正如我在一个旧答案中提到的那样,您实际上可以将启动配置直接保存为共享文件到您的项目目录中。然后,可以像其他项目文件一样对所有启动配置进行版本控制。

(来自博客文章技巧:从KD 创建和共享启动配置

替代文字


16
为.launch文件使用.metadata中的任何内容时,一种(IMO)更好的工作流程是:编辑启动配置时,在common选项卡上选择Save as > shared file。这会将其直接放到项目文件夹中,因此可以与项目的其余部分进行SCM处理。
Ipsquiggle 2010年

3
为什么.project应该在SCM中?例如,我想使用一个代码度量工具,该工具在启用后会导致.project的更改。我不想将其强加于项目的所有用户。
jfritz42

8
@ jfritz42:如果您仅对您有效地进行了本地且准时的更改,则.project暂时仅针对您的工作空间忽略该版本。但是不要剥夺所有其他用户可以在其Eclipse工作空间中快速导入的通用Eclipse项目定义,只是因为您碰巧有一个仅满足您当前需要的额外定义。
VonC

7
谢谢。我将仔细研究这些链接,但是我已经注意到,在您的第一个链接中,一个答案以“绝对是”开始,而下一个答案以“绝对不是”开始。Google充满了各种各样的,对新手不利的建议。我了解目标,但问题出在哪里。我来自Xcode,其中源代码和用户选项与Xcode生成的和编译器生成的输出完全分开,因此这个问题有一个简单的答案。对于Eclipse新手来说,这些文件似乎混合在一起并分散分布。我正在寻找一个简单易懂的答案
加里普(

3
我来自VisualStudio,我在这里第二个@garyp-这真是一团糟-如果Eclipse需要制作临时的和/或不必要的跟踪每个用户文件,则应将它们放在其他位置,以便可以跟踪项目和构建定义,并且所有临时垃圾都不会受到干扰。某个地方的Eclipse团队还没有其他官方指导吗?(很明显,日食团队不会进行单元测试[或者,如果他们这样做,他们就不会有效地进行测试],但至少告诉我他们使用源代码控制!XD)
BrainSlugs83 2014年

19

我目前正在开发一个项目,在该项目中,.project和.cproject文件在源代码控制下。想法是,与库路径和链接指令相关的设置将在整个团队中传播。

实际上,它的效果不是很好,合并几乎总是在冲突状态下返回,需要在月食之外进行冲突处理,然后关闭并重新打开项目以使更改生效。

我不建议将它们保留在源代码控制中。


14

这是值得什么,CDT配置文件不是源代码控制友好。.cproject文件存在一个错误归档,该错误非常频繁地更改并导致冲突,请参阅在存储库中共享cdt-project文件始终会导致冲突


Yikes-这个bug已有6年历史了,仍然没有被发现。显然,对Eclipse团队而言,源代码控制支持不是优先事项!
BrainSlugs83 2014年

2
还应注意,.cproject文件包含您不希望其他开发人员不得不手动重新创建的配置信息。啊。
Christopher Barber 2015年

7

某些项目(例如使用Maven的项目)喜欢基于POM生成.project文件。

就是说,除此之外-.metadata不应处于源代码控制中。您的项目必须根据计划如何管理标准等来确定projectdir / .settings是否起作用。如果您可以诚实地相信您的开发人员可以根据标准来设置他们的环境,而不必为任何项目定制任何特殊的东西,那么您就不需要放入它们。我建议您专门配置每个项目。这使开发人员可以在同一工作空间中处理多个项目的内容,而不必来回更改默认设置,并且使设置非常明确,可以覆盖其默认设置以符合项目标准的任何设置。

唯一困难的部分是确保它们都保持同步。但是在大多数情况下,您可以在项目之间复制.settings文件。如果您明确不想在源代码管理中进行任何操作,请在您的SCM支持的情况下,对它们进行相当于设置svn:ignore的操作。


2
我们使用Maven 1和2,并且仅在您要求时才生成.project文件。即使这样做,它也会基于POM的内容进行操作,因此,如果另一个开发人员已经为您完成了该步骤并将结果检查到版本控制中,为什么不利用它呢?
Andrew Swan

6

.classpath文件绝对是检查scm的不错选择,因为手动设置它可能需要很多工作,并且对于新开发人员进入该项目将是困难的。确实可以从其他来源生成它,在这种情况下,您需要签入其他来源。

至于.settings,取决于设置。这是一个灰色区域,但是有些设置几乎是必需的,并且能够检出项目,将其导入Eclipse并进行所有设置并方便进行。

因此,在我们的项目中,我们维护一个名为CVS.settings的.settings文件夹的副本,并且我们有一个ant任务将其复制到.settings。从CVS获取项目时,您将调用“ eclipsify” ant任务将默认设置复制到新的.settings文件夹中。当配置项目上所有开发人员都需要的设置时,可以将其合并回CVS.settings文件夹,并将其提交给CVS。这样,将设置保存在SCM中就成为一个有意识的过程。确实需要开发人员在签入重大更改时不时将这些设置重新合并到他们的.settings文件夹中。但这是一个简单的系统,效果非常好。


4

我什么都不说。它们很可能包含仅与您的工作站相关的信息(我正在考虑库的路径和所有路径)。如果团队中的某人没有使用Eclipse,该怎么办?


3
不,您可以在.classpath中包含相对路径。请参阅stackoverflow.com/questions/300328#300346
VonC

7
如果他们没有使用同一个开发人员,听起来就像是一个缺乏连贯性/效率低下的团队。工具,项目,调试和构建定义等。-接下来,您将告诉我不要使用通用的编码标准或JDK。-理想情况下,用户应该能够从源代码管理中下拉项目并直接跳入,而无需进行很多其他设置或说明。因此,这个答案对我来说是完全不可接受的。
BrainSlugs83 2014年

1
在合并过程中处理首选项文件中的冲突效率更高,因为有人从新工作区中打开了项目,这在大型项目中是一场噩梦。此外,强制使用具有完全相同配置的相同IDE听起来是不必要的限制。
A. Rodas

我同意[〜agnul]。项目应该使用某些构建工具(gradle,maven,ant等),并且IDE应该能够从构建工具配置文件(build.gradle,pom.xml,build.xml,等等...)不应对IDE文件进行版本控制。它们都是开发人员特定的文件,而不是项目特定的文件。它们简单不属于版本控制。
axiopisty

2

考虑:

.classpath
.project
.launch

只要您坚持使用项目相对路径,这些都应该在版本控制中。这使其他开发人员可以检出项目并立即开始工作,而不必经历其他开发人员也经历的所有安装难题。

您可能还会尝试将.metadata包含在版本控制中,因此Eclipse开发人员可以签出整个工作区并使用所有正确的项目对其进行预配置,但是它包含许多用户特定的信息,任何人在任何时候都可以使用它。更改,所以我建议不要包含.metadata。只需导入所有现有的Eclipse项目即可轻松构建本地工作区。


以我的经验,当您将Eclipse更新到较新的版本或在两种风格之间切换时,这种趋势通常会以各种方式打破。
托尔比约恩Ravn的安徒生

1

我花了太多时间为新同事(和我自己)配置Eclipse工作区设置。我最终要做的最终是将自己的.metadata复制到新的开发人员计算机上。

如果您在团队中工作,那么我认为以下是保持版本控制的很好的候选人:

  • 已安装的JRE及其名称
  • 服务器运行时环境
  • Java编辑器模板
  • 版本控制键盘快捷键
  • 不提供项目特定设置的插件设置
  • Maven设置
  • 预配置的观点
  • ...
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.