题 对于Android Studio项目,我的.gitignore应该是什么?


什么文件应该在我的 .gitignore 对于Android Studio项目?

我见过几个都包含的例子 .iml 但是IntelliJ文档说的那样 .iml 必须包含在源代码管理中。


1056
2018-05-24 14:04


起源


github.com/github/gitignore - Yousha Aleayoub


答案:


已更新至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到3.0,使用此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+开始,你似乎可以提交和推送 * .iml 和 的build.gradle 文件。如果您的项目基于Gradle:在新的打开/导入对话框中,您应该检查 "use auto import" 复选框并标记 "use default gradle wrapper (recommended)" 单选按钮。所有路径现在都是@George建议的相对路径。

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


1149
2017-07-23 07:29



为什么我们必须导入项目并手动添加库和模块依赖项?有没有办法在回购中保存这些东西,当我们克隆回购时只是打开一个项目? - Justin
正确的方法是检入* .iml和* .ipr文件,然后在IDE中打开它们。为什么要强迫团队中的其他人重新创建这些文件,以及为什么允许他们使用可能不正确的设置(例如sdk版本)? - Sky Kelsey
@liorry,我不同意。这是其他人会看到的第一个答案,而且是大幅上调的。由于使用这个特定的.gitignore从git中获得一个新的克隆后,你需要做的所有事情才能完成并运行我强烈认为这不是大多数人所需要的。虽然我猜上票的次数告诉了我,但我仍然不同意。至少,也许有些信息表明你很可能不得不再次设置项目,而且它不会开箱即用。 - Skela
@liorry,我不是故意粗鲁或任何交配,请不要亲自接受。问题是,这些东西需要以最少的设置工作才能实现任何实际用途。当您需要导入项目并手动添加模块依赖项时,它立即进入疯狂领域。当您熟悉项目并从内到外了解这些内容时,您的方法就没有问题。但对于第一次克隆该项目的开发人员来说,这并不是那么实用。我真的只是想确保你的方法不会成为常态。 - Skela
你应该 不 版本 .iml 文件,除非你不想处理不必要的烦恼,如果其他用户在结账时以不同的方式命名项目。 - theblang


建立在我的普通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)。


137
2018-01-10 16:23



几乎是正确的。我认为忽略* .so是一个好主意,因为您将无法处理在NDK库上链接了依赖项的项目。但是所有账户都是一个非常好的起点! - Skela
@Skela好点。从我构建自己的本机文件开始,我就有了这些文件 - 但是我还处理过需要简单复制和粘贴预构建文件的项目。我在上面的答案中添加了一个关于此的说明。 - Phil
@Phil您对XML文件有任何意见吗? .idea/libraries?您认为他们应该被分享还是被排除在外? - Alex Lockwood
@AlexLockwood我认为如果项目不依赖于另一个项目或模块,则应包含这些文件。但是,如果项目依赖于包含库的模块,则应在项目级别忽略此文件,但不应由模块忽略。 - Phil
@Phil非常酷,我到目前为止已经使用了这个,但是一个dex文件滑过了裂缝:/moduledirectory/build/intermediates/dex-cache/cache.xml-添加** / build是不是没有意义也排除模块中的构建文件夹? - Oliver Hausler


2015年7月更新:

这里是 来自JetBrains的最终消息来源


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

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

  • 所有文件都在 .idea 项目根目录  该 workspace.xml 和 tasks.xml 存储用户特定设置的文件
  • 一切 .iml 可以位于不同模块目录中的模块文件(适用于IntelliJ IDEA)

小心 关于分享以下内容:

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

您可以考虑不要分享以下内容:

  • gradle.xml文件,请参阅 这个讨论
  • 用户词典文件夹(以避免在其他开发人员具有相同名称时发生冲突)
  • XML文件下 .idea/libraries 如果他们是 从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

70
2017-08-26 22:45



支持哪些SDK在AndroidManifest.xml(以及Gradle)中定义。该设置允许的任何SDK都可以用于开发。关于代码样式:这不是必须在每个项目中单独维护的东西,而且应该独立于IDE进行澄清。版权标题:希望这些是在您的代码库中,而不是在任何IDE项目文件中。否则在命令行上构建根本就不包括它们...... - Risadinha
@Risadinha 1)SDK也在IDE级别定义。它们在Manifest中引用,但项目文件包含实际的SDK定义。 2)代码风格应至少保持在项目级别。理想情况下,每个人都会编写标准Java,但很好。 3)版权标题存储在项目中。它们用于创建新文件,并且可以包含名称,公司名称,项目,日期等的宏。我建议您检查它们!总之,项目文件包含有关需要在整个团队中共享和控制的项目的重要元信息。 - Sky Kelsey
维护者已将更改撤回到他自己的回购中。它很快就会被拉入大师级。 - FalconC
JetBrains已弃用DOC-1186并将其放入 在新帖子中更新了建议:DO INCLUDE:除了workspace.xml和tasks.xml以及所有.iml文件之外,项目根目录下的.idea目录下的所有文件。在共享产生签名版本(将包含密钥库密码),dataSources.ids和datasources.xml(它们可能包含密码)的Android工件时要小心。考虑因素排除:.idea / libraries下的gradle.xml,用户词典文件夹和XML文件(如果它们是从Gradle项目生成的)。 - JSmitty
这是一个可爱的理论,但这对我们来说根本不起作用。我们始终以.iml文件结尾,其条目如下: <orderEntry type="jdk" jdkName="1.6 (38)" jdkType="JavaSDK" /> 注意数字38似乎不断增加。 (misc.xml文件也有这个麻烦)。 - Sam


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

我忽略了:

  • /build
  • /.idea (可能有例外,请参阅评论 dalewking的答案
  • *.iml
  • local.properties

我想几乎每个人都同意 /build

我厌倦了不断看到各种各样的信息 library.xml Gradle创建或删除的文件 /.idea。该 build.gradle 当他们第一次签出项目时,它们将在开发人员的本地运行,那么为什么这些XML文件需要进行版本化? Android Studio还将生成其余部分 /.idea 当开发人员使用创建项目时 Check out from Version Control那么为什么该文件夹中的任何内容都需要进行版本化?

如果 *.iml 如果版本化,则新用户必须将项目命名为与提交时完全相同。既然这也是一个生成的文件,为什么它首先出现呢?

local.properties 文件指向SDK的文件系统上的绝对路径,因此它绝对不应该被版本化。

编辑1: 添加 .gradle 忽略不应该版本化的gradle缓存内容(谢谢 瓦西里马卡罗夫)。

编辑2: 添加 .DS_Store 现在我正在使用Mac。此文件夹是Mac特定的,应该  版本化。

附加说明:您可能还想在构建发布版本时添加一个目录来放置签名密钥。

复制/粘贴方便

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

34
2017-07-10 14:57



我同意你的回答。我也相信* .iml或.idea文件都不应该被版本化: stackoverflow.com/a/26290130/2948212 - iberodev
我的投票是为了你的gitignore,因为它非常像我的。情侣建议:使用 build/ 代替 /build 匹配模块构建目录 app/build。使用 .gradle 匹配gradle缓存目录。 - Vasily Makarov
我还质疑为什么默认的gitignore列表/构建而不是build /我最终得到我的存储库中app / build中的所有文件如果我使用/ build - guyland123
@ guyland123我刚注意到我有另一个 .gitignore 我的app目录中的文件也包含 /build。这是自动生成的,我记不住了?所以 build/ 将适用于子文件夹? - theblang
@mattblang是.gitignore是在您创建新项目时自动生成的。但是,当您从Eclipse导入项目时,不会创建它。 build /将匹配.gitignore文件位置下名为“build”的所有目录。例如。 app / build将被忽略。 - guyland123


我用这个.gitignore。我找到了: http://th4t.net/android-studio-gitignore.html

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

*/build/

*~
*.swp

32
2018-05-21 10:53



* / build /不会忽略我的构建目录中未更改的文件。有任何想法吗? @Solved:我不得不添加* / * / build /,因为我的构建文件夹是深度的几个目录。 - speedynomads
只是添加 build 为我工作。 - Myxtic
** / build为我工作 - Jonathan Lin
.iml怎么样? - Danail


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

  • * .iml
  • 。理念
  • 建立

但是,如果保存任何IDE设置(例如自定义代码样式设置),它们将保存在.idea文件夹中。如果您希望在版本控制中进行这些更改,那么您也可以保存IDEA文件(* .iml和.idea)。


30
2018-05-24 15:11



谢谢你的解释。根据我的阅读,如果你要在你的项目中包含.idea,你应该忽略* /。idea / workspace.xml和* /。idea / tasks.xml - respectTheCode
暂时不要忽略.idea文件夹。 Gradle插件还没有任何“gradle idea”任务,Android Studio中的导入项目现在远非完美。 - robotoaster
此外,如果您在团队中工作,请考虑忽略local.properties,因为它包含硬编码的sdk路径。 - Calin
@robotoaster,你还建议不要忽略.idea文件夹吗? - loeschg
不再需要@Ioeschg。如果你签出干净的git仓库使用导入新项目,只要存在构建文件它应该工作正常。 - robotoaster


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

我已经将一个基于Git的Eclipse项目导入Android Studio,并且运行良好。后来,我想用Git(就像第一次)将这个项目导入另一台安装了Android Studio的机器,但是没有用。 Android Studio确实加载了所有文件,但无法将项目“视为”项目。我只能打开Git文件。

在第一次导入项目时(从Eclipse到Android Studio),我的旧.gitignore被覆盖了,新的看起来像这样:

  • .idea / .NAME
  • .idea / compiler.xml
  • .idea /版权/ profiles_settings.xml
  • .idea / encodings.xml
  • .idea /库/ libs.xml
  • .idea / misc.xml
  • .idea / modules.xml
  • .idea /范围/ scope_settings.xml
  • .idea / vcs.xml
  • .idea / workspace.xml

所以,我试图使用一个空的gitignore,现在它工作了。另一个Android Studio可以加载文件和Project。我想有些文件并不重要 (profiles_settings.xml) 对于Git和导入,但我很高兴它有效。


16
2018-06-21 00:35





对于Android Studio 3.0项目,请使用以下内容:

的.gitignore

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

Gradle项目文件夹

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

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

11
2018-06-30 12:06



为什么要保留像gradlew和gradle.bat这样的二进制文件? - Bilthon
@Bilthon他们不是二进制文件。它们是Windows(gradle.bat)和Linux(gradlew)的gradle启动脚本。 - Willi Mentzel
哦......我看到你是对的,但他们不是自动生成的吗? - Bilthon
@Bilthon确实,他们是!它们是使用默认选项生成的。如果您更改了某些内容,则应将它们包含在您的存储库中,以便在检查新内容时正确构建它。它们太小了,总是保留它们并没有什么坏处。 - Willi Mentzel


无需添加到源控件以下任何一项:

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

因此,您可以相应地配置hgignore或gitignore。

开发人员第一次克隆源控件时可以:

  1. 打开Android Studio
  2. 导入项目
  3. 浏览克隆的存储库中的build.gradle并将其打开

就这样

PS:Android Studio将通过maven获取gradle插件,假设您的build.gradle看起来与此类似:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.12.2'
    }
}

allprojects {
    repositories {
        mavenCentral()
    }
}

Android studio将生成.idea文件夹的内容(包括workspace.xml,它不应该在源代码管理中,因为 它是生成的)和.gradle文件夹。

这种方法对Eclipse非常友好,因为源代码控制对Android Studio一无所知。 Android Studio只需要build.gradle来导入项目并生成其余的项目。


8
2017-10-10 00:34



那些负面投票的人应该提供这样做的正当理由。让我们/所有人知道我们的答案是否错误可能会有所帮助。 - iberodev
There is NO NEED 是的,有些情况:例如,需要在团队成员之间共享的版权模板。 - Henrique de Sousa


我支持提交.idea文件夹(不包括 workspace.xml 和 tasks.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


8
2018-05-06 20:38



我忽略了两者 /.idea 和 .iml 文件。我想听听为什么 .idea 文件夹应该提交。 - theblang
看看我当前的项目,我想我从.idea /中检查了两件事:为团队强制执行的代码样式设置和包含特定于项目的非真实单词的单词的用户词典。我开始使用.idea中的许多文件,但是当文件开始显示为已更改时没有任何理由它将被添加到.gitignore。我的观点并非如此,以至于应该检查.idea,因为它应该说.iml文件和modules.xml不应该。
他们是什么? - theblang
对不起,我在完成之前就接受了我的评论(要记住评论不接受换行符)。编辑了我的其余思想。
谢谢!是的,你提到的那些文件确实有意义。我同意,最让人头疼的是 library.xml 保持触发消息的文件。另外,我不明白为什么我一直看到人们说应该包含* .iml文件,所以非常重要。 - theblang


这是通过这里生成.gitignore的最佳方式: http://www.gitignore.io/


7
2018-06-02 00:17



我似乎无法为Android Studio工作。如果我只选择“android”,它似乎是一个Eclipse实现。我做错了吗? - zipzit
Eclipse中唯一提到的就是一行:“Eclipse生成的Proguard文件夹”。 AS的其余部分似乎没问题 - Jose_GD
@zipzit,可能你是对的。该网站似乎不会为Android Studio生成.gitignore,因为它不包含.idea /。 - CoolMind