IntelliJ IDEA 9 + Maven +版本控制的最佳实践

该项目正在使用Maven,所以POM文件是项目信息的主要来源。 在项目文件中有一些有用的设置,这将是很好的保持。

OTOH IDEA似乎在项目文件结构中创build了太多冗余的变化,污染了SVN的历史,有时会产生冲突。

我应该保持.idea目录和* .iml文件在版本控制下? 在全? 部分?

更新:所以我发现为我和我的团队工作的最佳做​​法是迄今为止:

  1. 检入所有的IDEA文件,* .iml和.idea目录。 它们包含有价值的信息,每次更新时都会浪费时间来重新创build。
  2. 为每个开发者创build私有分支
  3. cd进入.idea目录
  4. svn切换到它的私人分支机构
  5. 不要在常规提交中检查IDEA文件 – 它们会污染历史。 检查他们在特殊的承诺。

通过这种方式,您可以将版本控制中的.idea目录的内容保留在版本控制中,但不会妨碍正常提交。 任何开发人员都可以访问任何其他人的IDEA目录。

更新2:由于这个问题已经写好,我已经改变了我的做法,就是没有将任何IntelliJ文件检入到版本控制中,正如许多响应者所build议的那样。 这是我目前Maven和Gradle的做法。 这些工具已经发展到可以始终从原始的.POM或.gradle文件复制关键信息的地步。 当文件改变时,IDE可靠地跟踪改变,所以你不会丢失你的IDE文件,因此不需要检查它们。

更新3: 7年之后问这个问题似乎仍然有关。 相同的最佳实践也适用于Gradle(也可能是SBT):不要检查IDE文件,根据需要从基本的POM,.gradle或SBT文件中重新创build它们。

6 Solutions collect form web for “IntelliJ IDEA 9 + Maven +版本控制的最佳实践”

简单的回答:不要把这些文件放在源代码控制库中,因为你可以“生成”这些文件(如果你不需要它们,如果它们很烦人,如果它们可以打破其他环境的话,情况更是如此)。

我个人使用svn:ignore的以下值svn:ignore

 target *~ *.log .classpath .project *.ipr *.iws *.iml .settings 

Maven的一个重要的事情就是在Eclipse,Idea和Netbeans中将POM转换为本地项目的工具支持。 如果你有一个POM,你可以很快创build一个本地项目。

出于这个原因,我不会检查源代码pipe理下的.idea或* .iml文件,而不是检查RMI存根或类文件。

我认为你应该把.idea目录放到版本控制中。 这里包含的大多数configuration应该跟踪版本,例如编译器configuration。

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

IntelliJ Idea实际上默认将workspace.xml放到忽略列表中,所以如果你使用Idea来检查,你应该全部设置而不改变任何东西。

我看到标准答案是“不检查项目文件,只是.pom”。 但是像.ipr文件这样的东西包含许多有用的设置,不能从.pom文件派生。 如果IntelliJ用户想共享这些设置呢? 我知道.ipr文件被devise为版本化(例如,请参阅此线程 )。 我希望我有一个真正的答案,但我还没有find一个好的做法在这个问题上。

我的意见是,我们应该保留任何IDE特定的文件的版本控制。 我们的想法是,我们应该尽可能地保持像Maven Pom文件等IDE独立forms的信息。 所有重要的项目设置都可以保存在那里。 并且将所有主要的项目设置保存在pom文件中,我没有看到任何严重的原因,不仅要检查IDEA项目configuration,还要检查其他IDE特定的configuration。 此外,.idea文件夹样式项目configuration确实会污染更改集日志。 我们仍然希望将IDEA项目设置保存在版本控制中,我们至less可以将它们存储为单一的.ipr文件格式。

我迟到了,但是这个问题一直困扰着我。 我只是用我相信可以工作的启发,至less在我们的源代码pipe理系统中。

IntelliJ文件不必与授权的pom.xml和源文件一起存储。 如果这些非源相关的更改被logging到源树中的不同位置,则版本控制历史不被“污染”。

所以我会尝试将IntelliJ文件移动到版本控制系统中的一个并行位置,使用简单的文件/目录映射来统一开发者机器上的源文件和项目文件,并监视版本控制系统中纯粹影响文件的变化构build。

  • 如何获得使用本地maven代理库(Nexus)?
  • 在Ubuntu上安装sbt
  • 如何发布jar到本地存储库?
  • “错误:无法确定所选JDK中的Java VM可执行文件”的原因是什么?
  • 如何在命令行上设置runMain的系统属性?
  • Build.scala,%和%%符号的含义
  • 在IntelliJ IDEA中为Scala / sbt项目推荐.gitignore?
  • 想法,sbt,无法重新警告
  • 添加播放JSON库到sbt
  • sbt中的ScalaTest:有没有一种方法可以在没有标签的情况下运行单个testing?
  • sbt-assembly:重复数据删除发现错误