是否必须在版本控制中保存 *.iml 文件?

Posted

技术标签:

【中文标题】是否必须在版本控制中保存 *.iml 文件?【英文标题】:Is it mandatory to save *.iml files in Version control? 【发布时间】:2014-10-19 17:30:16 【问题描述】:

我现在已经切换到 android Studio 并使用源树将我的项目保存在 Git 中。每当我从模块中添加或删除任何库时,它的 .iml 文件也会更改。我是否提交 *.iml 并不重要,因为它们会在其他 Android Studio 中自动生成。但是,here 它说您应该存储 *.iml 。我的问题是,我们真的需要与他人分享我们的 *.iml 吗?如果是,为什么?

【问题讨论】:

是的!!!当你开发 gradle 基础项目时,.iml 文件存储你的项目信息,所以我认为它很好地存储在版本控制上。 恕我直言,只关注来自Haresh's link的2014年的答案。 我不同意 .iml 文件应该提交给源代码管理。它们是完全生成的,IDE 可以根据对 Gradle 文件的更改随意重写它们。这使得它们在 Gradle 文件中变得多余,而且当 Gradle 文件更改时,您还需要签出、维护和签入。 在最新的 Android Studio (1.5.1) 中,当您从头开始创建新的 Android 项目时,Android Studio 会自动创建 .gitignore 文件并在 .gitignore 中添加 *.iml。所以现在在 2016 年,答案将是“不,在版本控制系统中保存 .iml 文件不是强制性的。” 就我个人而言,我发现 Android Studio 不断对 .iml 文件进行细微的重新排列和更改,因此在版本控制中维护它们很麻烦。 【参考方案1】:

一般的最佳做法是:

使项目尽可能与 IDE 无关, 不要提交生成的文件。

所以答案是:最好让 VCS 忽略此类文件。

【讨论】:

我总是得到双重答案! Haresh 的上述评论说“是”,而你说“不”。我要去哪里?我认为这没关系,因为 *.iml 不共享任何用户的项目路径。所以分享起来似乎很好。你能分享一个链接,所有这些都是以其他方式解释的。 我不确定在你调用 maven 的线程中是否考虑到了 - 完全有可能在没有 maven 的情况下拥有 Idea 项目,在这种情况下它确实应该被提交(因为它是唯一的地方项目 conf 的存储位置)。但是,如果您使用 maven,并且只生成 iml,我看不出重点。【参考方案2】:

是的,.iml 文件适用于版本控制(参见this comment)

使项目尽可能与 IDE 无关也是正确的,但是,共享 .iml 文件不会破坏使用另一个 IDE 进行开发的人们的任何事情。对他们来说,它们只是一堆与他们无关的相对较小的文件。

对于同时使用不同 IDE 的团队来说,一个好的做法是将每个 IDE 的项目文件存储在 VCS 中,仅排除包含特定于单个开发人员环境的路径、环境变量等的项目文件。这样,任何使用受支持的 IDE 的人都可以享受适当的共享设置带来的好处,例如:

共享构建配置 共享依赖关系 自动代码质量检查的配置

还有更多用例,具体取决于正在使用的特定 IDE。 编辑:对于 IntelliJ,另请参阅 this FAQ

【讨论】:

【参考方案3】:

我同意它们是与代码无关的 IDE 相关文件,不应共享。 但是,那么您应该知道如何重新生成它们。

您可能会遇到远程仓库不包含这些文件的情况,当您克隆代码并在 IDEA 中打开时,它只会显示一堆错误。为什么? *.iml 文件不会重新生成。

您必须使用“文件”-“新建”-“版本控制项目”从 IDEA 导入。只有这样才能为您生成文件。

【讨论】:

还有另一种生成文件的方法。 ***.com/a/36542677/463304

以上是关于是否必须在版本控制中保存 *.iml 文件?的主要内容,如果未能解决你的问题,请参考以下文章

版本控制工具GIT使用指南

IDEA版本控制忽略文件或目录

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

Git版本控制工具学习

IDEA中的.iml文件和.idea文件夹作用和意义

IDEA中的.iml文件和.idea文件夹作用和意义