【问题标题】:Which Eclipse files belong under version control?哪些 Eclipse 文件属于版本控制?
【发布时间】:2010-09-25 03:17:38
【问题描述】:

除了明显的源代码之外,哪些 Eclipse 文件适合置于源代码控制之下?

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

.元数据/*
项目目录/.project
项目目录/.classpath
项目目录/.settings/*

如果它依赖于其中任何一个,请解释您的指导方针。

【问题讨论】:

    标签: eclipse version-control svn


    【解决方案1】:

    考虑:

    .classpath
    .project
    .launch
    

    只要您坚持使用项目相对路径,这些都应该在版本控制中。这允许其他开发人员检查项目并立即开始工作,而无需经历其他开发人员经历的所有设置痛苦。

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

    【讨论】:

    • 根据我的经验,当您将 Eclipse 更新到较新版本或在不同风格之间切换时,这往往会以各种方式中断。
    【解决方案2】:

    CDT 配置文件对源代码控制不友好是毫无价值的。 .cproject 文件经常更改并导致冲突,请参阅 Sharing cdt-project files in repository always causes conflicts

    【讨论】:

    • 哎呀——这个 bug 已经有六年了,还没有被触及。显然,源代码控制支持不是 Eclipse 团队的优先事项!
    • 还应注意,.cproject 文件包含您不希望强制其他开发人员必须手动重新创建的配置信息。呃。
    【解决方案3】:

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

    唯一的例外是.launch XML 文件(启动器定义)。

    它们位于

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

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

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

    (警告:请在运行/启动/启动中取消选中“删除关联资源时删除配置”选项配置首选项面板:通常软删除项目以便再次将其导入 - 强制重新初始化 eclipse 元数据。但如果选中此选项,将删除您的详细启动参数!)

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

    应该在您的 SCM 中(尤其是 .project.classpath,根据 Eclipse documentation)。

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

    为此,您只想在 .classpath 中使用 相对路径,使用 linked resources

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


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

    (来自 KD 的博文Tip: Creating and Sharing Launch Configurations

    【讨论】:

    • 一个 (IMO) 更好的工作流程来处理 .launch 文件的 .metadata 中的任何内容是:当您编辑启动配置时,在 common 选项卡上,选择 Save as > shared file。这会直接将它放到项目文件夹中,因此它可以与项目的其余部分一起进行 SCM。
    • 为什么 .project 应该在 SCM 中?例如,我想使用一个代码度量工具,该工具在启用时会导致 .project 发生变化。我不想强迫项目的所有用户这样做。
    • @jfritz42:如果您进行了仅对您有效的本地和准时更改,则暂时忽略该版本化的 .project 仅适用于您的工作区。但是不要剥夺所有其他用户可以在其 Eclipse 工作区中快速导入的通用 Eclipse 项目定义,因为您碰巧有一个仅适合您当前需要的额外定义。
    • 谢谢。我会仔细研究这些链接,但我已经注意到,在您的第一个链接中,一个答案以“绝对是”开头,而下一个答案以“绝对否”开头。谷歌充满了各种各样的、对新手不友好的建议。我理解目标,但如何到达那里是个问题。我来自 Xcode,其中源和用户选项与 Xcode 生成和编译器生成的输出完全分开,因此这个问题有一个简单的答案。对于 Eclipse 新手来说,这些文件似乎混合在一起并分散在各处。我正在寻找一个简单易懂的答案
    • 我来自 VisualStudio,我在这里是第二个 @garyp——这真是一团糟——如果 Eclipse 需要制作临时和/或不必要的跟踪每个用户的文件,它应该将它们放在其他地方,以便可以跟踪项目和构建定义,并且所有临时垃圾都不会妨碍。 Eclipse 团队在某处没有更多官方指导吗? (很明显,eclipse 团队没有进行单元测试[或者如果他们这样做,他们没有有效地进行测试],但至少告诉我他们使用源代码控制!XD)
    【解决方案4】:

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

    如果您在一个团队中工作,那么我认为以下是非常好的受版本控制的候选者:

    • 已安装的 JRE 及其名称
    • 服务器运行时环境
    • Java 编辑器模板
    • 版本控制键盘快捷键
    • 不提供项目特定设置的插件设置
    • Maven 设置
    • 预配置的视角
    • ...

    【讨论】:

      【解决方案5】:

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

      至于.settings,取决于设置。这是一个灰色区域,但有些设置几乎是强制性的,并且可以很方便地签出项目,将其导入 Eclipse 并设置好一切,一切顺利。

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

      【讨论】:

        【解决方案6】:

        一些项目,比如使用 Maven 的项目,喜欢基于 POM 生成 .project 文件。

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

        唯一困难的部分是确保它们都保持同步。但在大多数情况下,您可以将 .settings 文件从一个项目复制到另一个项目。如果您在源代码管理中特别不想要任何内容​​,请执行相当于为它们设置 svn:ignore(如果您的 SCM 支持)。

        【讨论】:

        • 我们使用 Maven 1 和 2,它只会在您要求时生成 .project 文件。即使你这样做了,它也是根据 POM 的内容来做的,所以如果其他开发人员已经为你完成了该步骤并将结果检查到版本控制中,为什么不利用它呢?
        【解决方案7】:

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

        实际上它并没有很好地工作,合并几乎总是以冲突状态返回,需要在 eclipse 之外解除冲突,然后项目关闭并重新打开以使更改生效。

        我不建议将它们保留在源代码管理中。

        【讨论】:

          【解决方案8】:

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

          【讨论】:

          • 不,您的 .classpath 中可以有相对路径。见stackoverflow.com/questions/300328#300346
          • 如果他们不使用同一个开发人员,这听起来像是一个非常不连贯/效率低下的团队。工具、项目、调试和构建定义等——接下来你要告诉我不要使用通用的编码标准或 JDK。 -- 理想情况下,用户应该能够从源代码管理中提取项目并直接进入,而无需大量额外的设置或说明。所以这个答案对我来说是完全不可接受的。
          • 在合并期间处理首选项文件中的冲突效率更低,因为有人从新工作区打开了项目——这在大型项目中是一场噩梦。此外,强制使用具有完全相同配置的相同 IDE 听起来像是一种不必要的限制。
          • 我同意 [~agnul]。项目应该使用一些构建工具(gradle、maven、ant 等),并且 IDE 应该能够从构建工具配置文件(build.gradle、pom.xml、build.xml、等等...) IDE 文件不应受版本控制。它们都是开发人员特定的文件,而不是项目特定的文件。它们根本不属于版本控制。
          猜你喜欢
          • 1970-01-01
          • 2011-03-12
          • 2011-11-12
          • 2011-11-08
          • 1970-01-01
          • 1970-01-01
          • 2020-06-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多