Android Studio-整个.idea目录应该在git中忽略吗?


137

我看到了很多.gitignore有关AndroidStudio文件的示例,其中有些包含.idea,有些则没有。

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

如果不应该完全忽略它,.idea中是否存在应放在.gitignore中的特定文件(例如.iml)?


.idea除了下的某些文件,我无视.idea/runConfigurations/
丹尼尔(Daniel)

Answers:


104

您可以看一下此页面:

有关项目配置文件的IntelliJ文档

在“基于目录的格式”中,有趣的是:

.idea目录包含一组配置文件(.xml)。每个文件包含仅与这反映在一个文件的名称的某些官能区域的配置数据的一部分,例如,compiler.xmlencodings.xmlmodules.xml

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

但是,我适当地讨厌使项目依赖于IDE(我目前正在使用NetBeans创建一个项目,并且将其与Eclipse结合使用会很麻烦,而Eclipse成为我公司的标准)。

因此,回答您的问题:

  1. 如果您不使用 Maven或Gradle之类的工具来管理依赖关系和构建,请执行以下操作将目录置于版本控制之下。这样,每个人都可以使用正确的项目配置和依赖项。在另一方,所有开发人员将必须完全按照您在配置文件中定义环境的方式来设置其环境。
  2. 如果您确实使用了Maven或Gradle之类的工具,正确配置这些工具,并且不要将目录置于版本控制之下。实际上,配置文件中包含的所有信息都应存储在Maven / Gradle文件中。然后让您的开发人员根据环境配置其IDE。这样,使用Eclipse,IntelliJ,Linux,Windows ...将不再是问题。

9
但是请注意下一段:“例外是文件workspace.xml。它存储您的个人设置...因此,您不太可能希望与同事共享此文件。”
黄檀

40

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

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

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


如何特别处理iml文件?
dors

1
iml文件绝对应该被忽略。
JBaruch 2014年

1
我仍然认为配置不应该保存在依赖IDE的文件中,因此Maven / Gradle更好。
mithrop 2014年

@mithrop问题是-您无法在Maven / Gradle文件中声明这种配置类型。这是Idea的专有格式,在Maven / Gradle中没有可移植的替代方案。
JBaruch 2014年

哦,是的,你是对的。无论如何,如果不能将其放入Maven / Gradle文件中,则下次在另一个IDE中导入项目时会遇到问题(这是我讨厌处理的问题)。但我完全同意您的看法(如果阅读我的回答,您会发现我确实是):您是否根据需要包含文件:)
mithrop 2014年

7

将项目配置保留在VC中的概念是有效的。我之所以与我的团队合作,是因为我们所有开发人员都在项目中使用PHPStorm,因此在概念上保持通用配置是很有意义的。我们希望使用相同的字典文件,相同的编码标准规则和相同的插件配置。

我之所以用“概念上”来称呼它,是因为JetBrains的.idea文件夹存在问题,导致我们无法使用它。这些可能是可以避免或解决的问题,但是我们不清楚如何正确地做,我们认为这是JetBrains的错,因为作为开发人员,我们没有时间也不想寻找解决方案,我们的IDE可以正常工作。

话虽这么说,但存在的问题如下:

  • 符号链接项目文件夹无法正常工作。设置项目时,我将它们符号链接到主目录中。我们发现,该项目设置为使用确切的符号链接,而不仅仅是将其视为具体目录。这意味着,如果另一个开发人员将其项目保留在其他位置,或者只是不使用符号链接,则项目导航器将丢失整个目录,因为它实际上是在寻找符号链接。更糟糕的是,我无法在配置中找到该路径值。我们无法在构成.idea文件夹的文件中找到确切的配置。
  • 默认情况下,定义文件已分区给用户。这意味着如果我想在字典中添加一个单词,它将作为我的定义(jgreathouse)列出,但是其他用户将有自己的定义部分。标记的单词对于其他用户仍将显示为拼写错误。这是不可取的。之所以将其添加到定义文件中是因为IDE错误。我希望这些定义可以与其他用户直观地共享。
  • 同事一直覆盖配置,因为他们的IDE会使用内存中当前的配置覆盖配置。我的意思是说,开发人员将在工作,并从源头合并其存储库,这将包含项目配置更改,而不是IDE更改配置,甚至是给他们一个选择,它将自动覆盖.idea配置。他们的IDE的当前内存配置。在我看来,这使.idea配置无法用作共享配置。为了解决此问题,开发人员实际上必须关闭其IDE实例,提取存储库,然后重新打开其IDE。如果IDE立即用内存中当前的配置覆盖共享配置,则保留共享配置没有任何意义。它'

在使用Visual Studio和Netbeans之前,我已经在VC中完成了这些类型的共享IDE配置,并且一切都很好。但是使用.idea时,感觉简直无法使用,令人失望。我希望JetBrains能够超越它,并使其获得更好的用户体验。


>而不是更改其IDE的配置,甚至给他们一个选择,它都将自动使用其IDE的当前内存配置覆盖.idea配置。哇,真是不幸。很高兴知道!
格雷格价格
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.