Version control IntelliJ IDEA.IPR和.IWS文件上的合并

Version control IntelliJ IDEA.IPR和.IWS文件上的合并,version-control,merge,intellij-idea,projects-and-solutions,Version Control,Merge,Intellij Idea,Projects And Solutions,我们将IntelliJ.IPR和.IWS文件保存在源代码管理中,但IntelliJ只需打开它们,就可以不断修改它们,即使项目中没有任何工作 我们做错了什么?一个解决方案是不要将IntelliJ项目置于源代码管理中。这意味着它们很容易重新创建 您可以告诉Subversion它应该忽略的文件。将IntelliJ文件添加到该列表中 “…即使没有在项目上做任何工作…”-这表明您经常打开IntelliJ而没有在项目上做任何有用的工作。也许这才是真正的问题。我不明白你为什么不做一些值得检查的事情就打开IDE

我们将IntelliJ.IPR和.IWS文件保存在源代码管理中,但IntelliJ只需打开它们,就可以不断修改它们,即使项目中没有任何工作


我们做错了什么?

一个解决方案是不要将IntelliJ项目置于源代码管理中。这意味着它们很容易重新创建

您可以告诉Subversion它应该忽略的文件。将IntelliJ文件添加到该列表中


“…即使没有在项目上做任何工作…”-这表明您经常打开IntelliJ而没有在项目上做任何有用的工作。也许这才是真正的问题。我不明白你为什么不做一些值得检查的事情就打开IDE。修订数量增加的代价是什么?在我看来,很小


所以现在我改变了主意。签入IntelliJ项目文件,不要担心版本号的增加。它们不会让你付出太多的代价。

如果不知道到底发生了什么变化,很难自信地回答这个问题,但我想说:

  • IWS文件包含描述如何为该项目安排开发人员的IDE的信息(包括最近的更改历史记录、每个编辑器窗口的当前状态、哪些可停靠窗口可见以及哪些已折叠)。考虑到每个开发人员都应该被允许以他们喜欢的方式安排他们的工作空间,这些不应该处于源代码管理中

  • IPR文件描述了项目代码的结构——我的意思是,哪些模块是项目的一部分,哪些build.xml文件要使用,在哪里可以找到库来编译代码等等。这可以在源代码管理中进行,但如果允许这些设置因开发人员的项目副本而异,你会遇到困难的

如果IPR文件中有libraryTable组件:

几乎可以肯定的是,每个开发人员都将构建代码所需的共享库(JAR)保存在不同位置的本地机器上;提交更改时,其库的位置将写入IPR文件。如果您这样做,当我更新项目时,我的IPR副本和您的IPR副本将在这些JAR的位置上发生冲突

我们通过在共享位置(如映射的网络驱动器)定位JAR文件,然后确保每个开发人员将这些文件下载到同一个位置(项目根目录下的lib子文件夹工作正常)来解决这个问题。不利的一面是,您最终会在多个项目中得到同一个JAR的多个副本(每个项目都会引用自己的lib文件夹),但有利的一面是,由于每个开发人员都使用相同的项目结构,更新ipr应该会更好

否则:

查看IntelliJ试图合并的内容(更新时,应提供手动合并文件或查看差异的选项,否则使用您喜爱的diff工具)。如果您可以用更多关于合并冲突的信息更新您的问题,这可能会使您更容易看到问题的症结所在

“我们将IntelliJ.IPR和.IWS文件保存在源代码管理中,但IntelliJ只需打开它们,就可以不断修改它们,即使项目中没有任何工作。”

IWS文件绝对是每个开发人员的文件,因此它不应该受源代码控制

对于最近一个项目中的.IPR文件,我们最初尝试在概念上对该文件进行版本设置,就像您使用.Net项目和VS.Net.SLN文件一样。我们的目标是在15分钟内让开发人员在干净的PC上启动并运行,包括安装IDE或本地数据库等相关软件所需的时间。最后,我们花了一些时间调整本地配置,如下所示

问题是.IPR文件存储的设置比.sln文件存储的设置多,例如单个插件的设置。因此,覆盖的一个主要原因是,如果具有不同插件配置的开发人员打开IPR文件,则插件的一些默认设置会写入该文件。我们觉得开发人员不应该把自己局限于一个给定的插件超集(只是一个最小的配置)

我们缓解这个问题的方法(虽然没有完全解决)是切换到.idea文件夹格式。这将获取.IPR文件的内容,并将许多节点拆分为.idea子文件夹中的各个文件和文件夹。从这里,我们可以从源代码管理中排除许多经常写入文件的内容。我们排除的一些文件是:

  • workspace.xml
  • dataSources.xml
  • sqlDataSources.xml
  • dynamic.xml
我们希望IntelliJ不要管的一些文件是(尽管责任也可以归咎于插件开发人员,而不仅仅是Jetbrains):

  • projectCodeStyle.xml(因此我们可以在项目中获得一致的代码格式-同样,这可以根据开发人员的本地插件组合进行覆盖)
  • runConfigurations文件夹下的任何文件。配置运行配置可能会很耗时,特别是当您有一个具有多个方面的复杂应用程序时。通过简单地打开IDE或构建而改变的最愚蠢的事情是RunnerSettings下的“DEBUG_PORT”选项。我的观点是,如果它是动态分配的,为什么不使用“动态”值呢
  • misc.xml。该文件还包含插件配置。有些设置看起来很方便共享,而另一些则更适合个人配置。例如,IvyIDEA插件为你的ivy配置文件提供了一个绝对路径
  • 模块文件。这些都是单独存在的,但是一个不必要的覆盖的例子是IvyIDEA插件,它将本地ivy缓存位置的详细信息放在这个文件中。但这也是插件的错,而不是真正的Jetbra