Android工作室 – 整个.idea目录应该在git忽略?

我看到了很多针对AndroidStudio的 .gitignore文件的例子,其中一些有.idea ,有些则不。

是否有充分的理由不把整个.idea目录添加到.gitignore?

如果它不应该被完全忽略,.idea(如.iml)里面是否应该在.gitignore中有特定的文件?

你可以看看这个页面:

IntelliJ文档关于项目configuration文件

在“基于目录的格式”中,特定的一行很有趣:

.idea目录包含一组configuration文件(.xml)。 每个文件只包含属于特定function区域的一部分configuration数据,这些configuration数据反映在文件的名称中,例如, compiler.xmlencodings.xmlmodules.xml

几乎所有的文件都包含项目本身的核心信息,如组件模块的名称和位置,编译器设置等等。 因此,这些文件可能(而且应该)保持在版本控制之下。

但是,我正确地HATE使项目依赖于IDE(我目前正在使用NetBeans制作的项目,它使用Eclipse成为我公司的标准)。

所以,要回答你的问题:

  1. 如果你不使用类似Maven或Gradle的东西来pipe理依赖和构build: 保持目录在版本控制下 。 这样,项目和依赖关系的正确configuration将适用于所有人。 在对手中,所有的开发者都必须按照你在configuration文件中定义的方式来设置他们的环境。
  2. 如果你确实使用了Maven或者Gradle 这样的东西:正确地configuration这些工具, 不要将目录保存在版本控制之下 。 实际上,configuration文件中包含的所有信息都应该存储在Maven / Gradle文件中。 然后让开发人员根据其环境configuration他们的IDE。 这样,使用Eclipse,IntelliJ,Linux,Windows …将不再是一个问题了。

好,所以在一些“是”和“否”的答案后,我添加了“是和否”的答案:)

问题是.idea用于项目构buildconfiguration(依赖声明)和项目设置(检查等)。

您绝对不想将您的IDE用于构buildconfiguration,但您可能希望在团队中共享这些设置。 这就是为什么你只需要忽略.idea内容的一部分(比如libraries文件夹和modules.xml文件),但是要保留其他的版本控制(比如copyrightdictionariesinspectionProfiles文件夹以及.idea下的文件就像dynamic.xmlcodeStyleSettings.xml等)。

在VC中保持项目configuration的概念是有效的。 我是和我的团队一起做的,因为我们所有的开发者都碰巧使用PHPStorm来开发我们的项目,所以在概念上保持一个通用的configuration是有意义的。 我们想要使用相同的字典文件,相同的编码标准规则和相同的插件configuration。

我之所以用“概念”来解释这个问题,是因为JetBrains的.idea文件夹有问题导致我们无法使用它。 这些可能是可以避免或修复的问题,但是我们不清楚如何做对,我们认为这是JetBrains的一个错误,因为作为开发者,我们没有时间也没有想要寻找解决scheme的方法我们的IDE工作正常。

这就是说,问题是有以下几点:

  • Symlinking项目文件夹不能正常工作。 当我build立我的项目时,我将它们符号链接到我的主目录。 我们发现这个项目的设置是为了使用确切的符号链接,而不是像一个具体的目录那样对待它。 这意味着如果另一个开发人员把他的项目放在不同的地方,或者根本就不使用符号链接,项目导航器中将会丢失整个目录,因为它完全是在寻找符号链接。 更糟糕的是,我无法在configuration中find这个path值。 我们无法在构成我们的.idea文件夹的文件中find确切的configuration。
  • 定义文件默认分区给用户。 这意味着如果我想添加一个单词到我的字典,它将被列为我的定义,jgreathouse,但其他用户将有自己的定义部分。 被标记的单词仍然会显示为其他用户的拼写错误。 这是不可取的。 我把它添加到我的定义文件的原因是因为IDE是错误的。 我希望这些定义能够直观地与其他用户共享。
  • 同事们不断覆盖configuration,因为他们的IDE会覆盖configuration目前在内存中的configuration。 我的意思是,一个开发人员将工作,并从源头合并他们的存储库,这将包含项目configuration更改,而不是他们的IDE更改configuration,甚至给他们一个select,它会自动覆盖.ideaconfiguration他们的IDE的当前内存configuration。 在我看来,这使.ideaconfiguration作为一个共享的configuration不可用。 为了解决这个问题,开发人员必须closures他们的IDE实例,取回资源库,然后重新打开他们的IDE。 如果IDE立即用内存中的configuration覆盖它,保持共享configuration是没有意义的。 这就像没有一个共享的configuration。

在Visual Studio和Netbeans之前,我已经在VC中完成了这些types的共享IDEconfiguration,并且一直很好。 但与.idea感觉简直无法使用,这是令人失望的。 我希望JetBrains能够取得更好的用户体验。

我总是在gitignore中添加这个目录。 其中包含的所有文件在每次重build项目时都会生成。 这个文件在项目中不起重要的作用,但是在将来的assembly中可能会有错误或麻烦。