Android Studio 项目的. gitignore 应该是什么?

Android Studio 项目的.gitignore文件中应该包含哪些文件?

我已经看到了几个都包含.iml示例,但是 IntelliJ 文档说.iml必须包含在源代码控件中。

答案

更新至 Android Studio 3.0。请分享评论中缺少的内容。

答案很晚,但这里和这里的答案都不对,这对我们来说是钱...

因此,这是我们的 gitignore 文件:

#built application files
*.apk
*.ap_

# files for the dex VM
*.dex

# Java class files
*.class

# generated files
bin/
gen/

# Local configuration file (sdk path, etc)
local.properties

# Windows thumbnail db
Thumbs.db

# OSX files
.DS_Store

# Android Studio
*.iml
.idea
#.idea/workspace.xml - remove # and delete .idea if it better suit your needs.
.gradle
build/
.navigation
captures/
output.json 

#NDK
obj/
.externalNativeBuild

从 Android Studio 2.2 及更高版本开始,使用 gitignore 文件创建新项目:

*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
.externalNativeBuild

不推荐使用 - 对于较旧的项目格式,请将此部分添加到您的 gitignore 文件中:

/*/out
/*/*/build
/*/*/production
*.iws
*.ipr
*~
*.swp

该文件应位于项目的根文件夹中,而不应位于项目的模块文件夹中。

编辑注释:

  1. 从 0.3 + 版本开始,您似乎可以提交并推送* .imlbuild.gradle文件。如果您的项目基于 Gradle:在新的打开 / 导入对话框中,则应选中"use auto import"复选框,并标记"use default gradle wrapper (recommended)"单选按钮。现在所有路径都是相对的,如 @George 所建议。

  2. 根据 @ 128KB 附件来源和 @Skela 建议更新了答案

在我正常的 Android .gitignore上构建,并通读 Intellij IDEA 网站上的文档并阅读 StackOverflow 上的帖子后,我构建了以下文件:

# built application files
*.apk
*.ap_

# files for the dex VM
*.dex

# Java class files
*.class

# built native files (uncomment if you build your own)
# *.o
# *.so

# generated files
bin/
gen/

# Ignore gradle files
.gradle/
build/

# Local configuration file (sdk path, etc)
local.properties

# Proguard folder generated by Eclipse
proguard/

# Eclipse Metadata
.metadata/

# Mac OS X clutter
*.DS_Store

# Windows clutter
Thumbs.db

# Intellij IDEA (see https://intellij-support.jetbrains.com/entries/23393067)
.idea/workspace.xml
.idea/tasks.xml
.idea/datasources.xml
.idea/dataSources.ids

还请注意,如前所述,在使用 Android NDK 构建自己的本机代码时,“ 构建本机文件”部分主要有用。另一方面,如果您正在使用包含这些文件的第三方库,则可能希望从. gitignore 中删除这些行(* .o 和 * .so)。

2015 年 7 月更新:

这是JetBrains 的权威资料


基于目录的项目格式(.idea 目录)

默认情况下,所有最近的 IDE 版本都使用此格式。这是您需要分享的内容:

  • 项目根目录中.idea目录下的所有文件, workspace.xml tasks.xmltasks.xml文件除外tasks.xml文件存储用户特定的设置
  • 可以位于不同模块目录中的所有.iml模块文件(适用于 IntelliJ IDEA)

分享以下内容时要小心

  • 产生签名版本的 Android 工件(将包含密钥库密码)
  • 在 IDEA 13 和更早版本的dataSources.idsdatasources.xml可以包含数据库密码。 IDEA 14 解决了这个问题

您可以考虑不共享以下内容:

  • gradle.xml 文件,请参阅此讨论
  • 用户字典文件夹(如果其他开发者具有相同的名称,则避免冲突)
  • .idea/libraries下的 XML 文件(如果它们是从 Gradle项目生成的)

旧版项目格式( .ipr / .iml / .iws文件)

  • 共享项目.ipr文件和所有.iml模块文件, 请勿共享 .iws文件,因为它存储了用户特定的设置

尽管这些说明适用于 IntelliJ IDEA,但它们适用于 Android Studio 的比例为 100%。


这是一个.gitignore片段,其中包含上述所有规则:

# Android Studio / IntelliJ IDEA 
*.iws
.idea/libraries
.idea/tasks.xml
.idea/vcs.xml
.idea/workspace.xml

我不同意所有这些答案。以下配置非常适合我们组织的应用程序。

我忽略:

我认为几乎每个人都同意/build

我讨厌不断地看到有关 Gradle 在/.idea创建或删除的各种library.xml文件的消息。当开发人员首次签出项目时, build.gradle将在开发人员的本地运行。为什么要对这些 XML 文件进行版本控制?当开发人员使用Check out from Version Control/.idea出创建项目时,Android Studio 还将生成/.idea的其余部分,那么为什么需要对该文件夹中的所有内容进行版本控制?

如果*.iml是版本,则新用户将必须使用与提交时完全相同的名称来命名项目。由于这也是一个生成的文件,为什么要首先对其进行版本控制?

local.properties文件指向 SDK 的文件系统上的绝对路径,因此绝对不应对其进行版本控制。

编辑 1 :添加了.gradle以忽略不应版本化的 gradle 缓存内容(感谢Vasily Makarov )。

编辑 2 :现在,我正在使用 Mac,添加了.DS_Store 。此文件夹的 Mac 专用, 应该进行版本控制。

附加说明 :在构建发行版本时,您可能还想添加目录以放置签名密钥。

为了方便复制 / 粘贴

.gradle
/build
/.idea
*.iml
local.properties
.DS_Store

我使用这个. gitignore。我在以下位置找到了它: http : //th4t.net/android-studio-gitignore.html

*.iml
*.iws
*.ipr
.idea/
.gradle/
local.properties

*/build/

*~
*.swp

对于 Android Studio,唯一需要保存在版本控制中的文件是使用 gradle 从命令行构建应用程序所需的文件。因此,您可以忽略:

  • * .iml
  • 。理念
  • 建立

但是,如果保存任何 IDE 设置(例如自定义代码样式设置),它们将保存在. idea 文件夹中。如果要在版本控制中进行这些更改,则还需要保存 IDEA 文件(* .iml 和. idea)。

我的建议是不要忽略. idea 文件夹。

我已将基于 Git 的 Eclipse 项目导入 Android Studio,一切正常。后来,我想将此项目与 Git 一起导入(与第一次一样)到具有 Android Studio 的另一台计算机上,但这没有用。 Android Studio 确实加载了所有文件,但无法将项目 “视为” 项目。我只能打开 Git 文件。

首次导入项目(从 Eclipse 到 Android Studio)时,我的旧. gitignore 被覆盖,新的. gitignore 如下所示:

  • .idea / .name
  • .idea / compiler.xml
  • .idea / copyright / profiles_settings.xml
  • .idea / encodings.xml
  • .idea / libraries / libs.xml
  • .idea / misc.xml
  • .idea / modules.xml
  • .idea / scopes / scope_settings.xml
  • .idea / vcs.xml
  • .idea / workspace.xml

因此,我尝试使用空的 gitignore,现在它可以了。另一个 Android Studio 可以加载文件和项目。我猜有些文件对于 Git 和导入并不重要(profiles_settings.xml) ,但我很高兴它能起作用。

Android Studio 3.4

如果您使用 Android Studio 创建 Gradle 项目,则.gitignore文件将包含以下内容:

.gitignore

*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild

我建议忽略完整的 “.idea” 目录,因为该目录包含特定于用户的配置,对于构建过程而言并不重要。

Gradle 项目文件夹

克隆存储库后,唯一应该在您的(Gradle)项目文件夹中的就是这个结构(至少对于我到目前为止遇到的用例而言):

app/
.git/
gradle/
build.gradle
.gitignore
gradle.properties
gradlew
gradle.bat
settings.gradle

建议签入 gradle 包装器脚本(请参阅此处 )。

为了使包装器文件可用于其他开发人员和执行环境,您需要将其检入版本控制。

这是通过此处生成.gitignore的最佳方法

我支持. idea 文件夹的提交(不包括workspace.xmltasks.xml )。但是我开始得出结论,应该忽略. iml 文件。

这是问题所在:

例如,在名为 “foo” 的目录中打开一个项目,您将获得 foo.iml,一切似乎都很好。问题是,当您尝试在 Android Studio 中打开项目时,如果我只是简单地将目录重命名为 foo2(或将其克隆为另一个目录名称),则会得到以下三点:

  • 一个名为 foo2.iml 的新 iml 文件
  • 您的 Android 项目的 iml 文件将更改为现在指向 foo2 作为其父项
  • .idea / modules.xml 将为 foo2.iml 添加一行,因此它既包含旧的 iml 文件,又包含新目录的文件。

当项目存储在其他目录中时,我无法找到阻止 Android Studio 执行此 iml 文件生成的方法。将它们添加到源代码管理将导致问题。因此,我认为也许我们应该忽略 * .iml 文件和.idea/modules.xml