【问题标题】:Android studio - should the entire .idea directory be in git ignore?Android studio - 整个 .idea 目录是否应该在 git ignore 中?
【发布时间】:2014-12-07 19:47:04
【问题描述】:

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

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

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

【问题讨论】:

标签: android git android-studio gitignore


【解决方案1】:

作为对本问题解释的补充,GitHub's .gitignore template for Android 包括以下文件:

# IntelliJ
*.iml
.idea/workspace.xml
.idea/tasks.xml
.idea/gradle.xml
.idea/assetWizardSettings.xml
.idea/dictionaries
.idea/libraries
# Android Studio 3 in .gitignore file.
.idea/caches
.idea/modules.xml
# Comment next line if keeping position of elements in Navigation Editor is relevant for you
.idea/navEditor.xml

另请注意 JetBrains 指南 How to manage projects under Version Control Systems 上关于与其他开发人员共享 IDE 项目文件的条目:

需要分享的内容:

项目根目录下.idea目录下的所有文件,除了 存储用户特定设置的项目:workspace.xml usage.statistics.xml 架子目录

【讨论】:

  • 所以也许我在这里遗漏了一些东西,但是如果我排除 gradle.xml,我的项目的用户将如何知道要使用哪个 gradleJvm?
【解决方案2】:

你可以看看这个页面:

IntelliJ doc about project configuration files

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

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

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

但是,我非常讨厌使项目依赖于 IDE(我目前正在开发一个使用 NetBeans 制作的项目,并且将它与已成为我公司标准的 Eclipse 一起使用会很痛苦)。

所以,回答你的问题:

  1. 如果您不使用诸如 Maven 或 Gradle 之类的东西来管理依赖项和构建:将目录保留在版本控制之下。这样,每个人都可以使用项目和依赖项的正确配置。相反,所有开发人员都必须按照您在配置文件中定义的方式来设置他们的环境。
  2. 如果您确实使用类似 Maven 或 Gradle 的工具:正确配置这些工具并且不要将目录置于版本控制之下。实际上,配置文件中包含的所有信息应该存储在 Maven/Gradle 文件中。然后让您的开发人员根据他们的环境配置他们的 IDE。这样一来,使用 Eclipse、IntelliJ、Linux、Windows ... 将不再是问题。

【讨论】:

  • 但请注意下一段:“文件workspace.xml 是个例外。它存储您的个人设置......因此您不太可能希望与您的同事共享此文件。”
  • 如果您在 gitignore 文件中添加了所需的行代码来执行此操作,那就太好了。对于新手来说,添加正确的说明可能有些困难。
【解决方案3】:

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

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

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

【讨论】:

  • 具体如何处理 iml 文件?
  • iml 文件绝对应该被忽略。
  • 我仍然认为配置不应该保存在依赖于 IDE 的文件中,所以 Maven/Gradle 这样做更好。
  • @mithrop 问题是 - 你不能在 Maven/Gradle 文件中声明这种类型的配置。这是 Idea 自己的专有格式,在 Maven/Gradle 中没有可移植的替代方案。
  • 哦,是的,你是对的。无论如何,如果不能把它放在 maven/gradle 文件中,下次你在另一个 IDE 中导入项目时会遇到问题(这是我讨厌处理的问题)。但我完全同意你的看法(如果阅读我的回答,你会发现我真的是):你是否包含文件取决于你的需要:)
【解决方案4】:

在 VC 中保留项目配置的概念是有效的。我和我的团队一起做这件事是因为我们所有的开发人员都碰巧在我们的项目中使用 PHPStorm,所以在概念上保持一个通用的配置是有意义的。我们希望使用相同的字典文件、相同的编码标准规则和相同的插件配置。

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

话虽如此,问题如下:

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

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

【讨论】:

  • > 而不是他们的 IDE 更改配置,甚至给他们一个选择,它会自动用他们 IDE 的当前内存配置覆盖 .idea 配置。哇,真是可惜了。很高兴知道!
猜你喜欢
  • 2011-08-27
  • 1970-01-01
  • 2013-08-20
  • 2013-08-01
  • 2019-03-09
  • 1970-01-01
  • 1970-01-01
  • 2019-08-26
  • 1970-01-01
相关资源
最近更新 更多