41

该项目使用 Maven,因此 POM 文件是项目信息的主要来源。项目文件中有一些有用的设置可以很好地保留。

OTOH IDEA 似乎在项目文件结构中创建了太多冗余更改,这会污染 SVN 历史记录,有时还会产生冲突。

我应该将 .idea 目录和 *.iml 文件置于版本控制之下吗?在全?部分?

更新:所以到目前为止,我发现为我和我的团队工作的最佳实践是:

  1. 检入所有 IDEA 文件、*.iml 和 .idea 目录。它们包含有价值的信息,每次更新时重新创建它是浪费时间。
  2. 为每个开发者创建私有分支
  3. cd 进入 .idea 目录
  4. svn 将其切换到其私有分支对应物
  5. 不要在定期提交时签入 IDEA 文件——它们会污染历史记录。检查他们的特殊提交。

这样,您将 .idea 目录的内容保留在版本控制中,但不会影响常规提交。任何开发人员都可以访问任何其他人的 IDEA 目录。

更新 2:自从写了这个问题以来,我已经改变了我的做法,将任何 IntelliJ 文件签入版本控制,正如许多响应者所建议的那样。这是我目前对 Maven 和 Gradle 的实践。这些工具已经发展到可以始终从原始 .POM 或 .gradle 文件中复制关键信息的程度。当文件更改时,IDE 会可靠地跟踪更改,因此您不会经常丢失 IDE 文件,因此无需签入。

更新 3:问这个问题 7 年后,它似乎仍然相关。相同的最佳实践也适用于 Gradle(可能也是 SBT):不要签入 IDE 文件,必要时从基本的 POM、.gradle 或 SBT 文件重新创建它们。

4

6 回答 6

17

简短的回答:不要将这些文件放在源代码控制存储库中,因为您可以“生成”它们(如果您不需要它们,如果它们很烦人,如果它们可以破坏其他环境,则更是如此)。

我个人将以下值用于svn:ignore

target 
*~ 
*.log 
.classpath 
.project 
*.ipr 
*.iws 
*.iml 
.settings 
于 2009-10-31T20:09:16.837 回答
15

Maven 的一大优点是该工具支持将 POM 转换为 Eclipse、Idea 和 Netbeans 中的本机项目。如果你有一个 pom,你可以很快地创建一个原生项目。

出于这个原因,我不会在源代码控制下签入 .idea 或 *.iml 文件,就像签入 RMI 存根或类文件一样。

于 2009-11-01T02:37:14.710 回答
14

我认为您应该将 .idea 目录放入版本控制中。那里包含的大部分配置都应该有版本跟踪,例如编译器配置。

唯一不属于版本控制的文件是 .idea/workspace.xml,因为它只包含特定于本地环境的配置。

IntelliJ Idea 实际上默认将workspace.xml 放入忽略列表,所以如果你使用Idea 签入,你应该在不改变任何东西的情况下全部设置好。

于 2009-12-13T18:27:12.883 回答
9

我看到标准答案是“不签入项目文件,只签入 .pom”。但是 .ipr 文件之类的内容包含许多无法从 .pom 文件派生的有用设置。如果其他 IntelliJ 用户想要共享这些设置怎么办?我知道 .ipr 文件被设计为版本控制(例如,参见这个线程)。我希望我有一个实际的答案,但我还没有在这个问题上找到一个好的做法。

于 2009-12-07T02:08:19.017 回答
3

我的意见是我们应该将任何 IDE 特定文件排除在版本控制之外。我们的想法是,我们应该尽可能多地以独立于 IDE 的形式保存信息,例如 Maven pom 文件等。所有关键的项目设置都可以保存在那里。并且将所有主要项目设置保存在 pom 文件中,我认为没有任何理由不仅要检查 IDEA 项目配置,还要检查任何其他 IDE 特定配置。此外,.idea 文件夹样式的项目配置确实会污染变更集日志。而且我们仍然希望将 IDEA 项目设置保留在版本控制中,我们至少可以将它们存储为单个 .ipr 文件格式。

于 2010-01-18T11:57:52.047 回答
1

我参加这个聚会迟到了,但这个确切的问题一直困扰着我。我只是受到了我认为可行的东西的启发,至少在我们的源代码控制系统中是这样。

IntelliJ 文件不必与权威的 pom.xml 和源“一起”存储。如果将那些与源代码无关的更改记录到源代码树中的不同位置,则版本控制历史不会“被污染”。

因此,我将尝试将 IntelliJ 文件移动到版本控制系统中的并行位置,使用简单的文件/目录映射来重新统一开发人员机器上的源文件和项目文件,并监控版本控制系统中纯粹针对影响文件的更改构建。

于 2012-07-13T04:50:56.880 回答