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

res*_*ode 1210 git gitignore android-studio

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

我已经看到几个例子都包括.iml但IntelliJ文档说.iml必须包含在你的源代码管理中.

Lio*_*luz 1293

已更新至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
Run Code Online (Sandbox Code Playgroud)

从Android Studio 2.2到3.0版本,使用此gitignore文件创建了新项目:

*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
.externalNativeBuild
Run Code Online (Sandbox Code Playgroud)

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


/*/out
/*/*/build
/*/*/production
*.iws
*.ipr
*~
*.swp
Run Code Online (Sandbox Code Playgroud)

此文件应位于项目的根文件夹中,而不是位于项目的模块文件夹中.

编辑笔记:

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

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

  • @liorry,我不同意.这是其他人会看到的第一个答案,并且是大幅上调的.由于使用这个特殊的.gitignore从git进行了一次新的克隆后,你需要做的所有事情才能让项目启动和运行,我强烈认为这不是大多数人所需要的.虽然我猜投票的数量告诉我,但我仍然不同意.至少,也许有些信息表明你很可能不得不重新设置项目,而且它不会开箱即用. (24认同)
  • 如果其他用户在签出时以不同的方式命名项目,除非你不想处理不必要的烦恼,否则你不应该**版本`.iml`文件. (14认同)
  • 正确的方法是检入*.iml和*.ipr文件,然后在IDE中打开它们.为什么强迫团队中的其他人重新创建这些文件,以及为什么允许他们使用可能不正确的设置(例如sdk版本)? (12认同)
  • @liorry,我不是故意粗鲁或任何交配,请不要亲自接受.问题是,这些东西需要以最少的设置工作才能实现任何实际用途.当您需要导入项目,并手动添加模块依赖项时,它立即进入疯狂领域.当您熟悉项目并从内到外了解这些内容时,您的方法就没有问题.但对于第一次克隆该项目的开发人员来说,这并不是那么实用.我真的只是想确保你的方法不会成为常态. (10认同)
  • 为什么我们必须导入项目并手动添加库和模块依赖项?有没有办法在回购中保存这些东西,当我们克隆回购时只是打开一个项目? (8认同)
  • 对.每当有人做出改变,你就会得到它们.这就是项目文件的重点.你把它交给每个合作者,代码stye,版权信息和许多其他东西得到复制.他们改变了什么样的事情?似乎他们不应该做出这些改变,或者有人不得不制造它们. (3认同)
  • @Skela这对我们有用,因此我们分享了它.它似乎也有助于其他人.如果它不适合您或您找到一个更适合您的需求,那并不意味着这个答案并不好. (3认同)
  • @liorry对不起,我指的是iml文件中的相对路径.我认为通过导入项目强制团队中的每个人都创建自己的iml文件是不合理或合理的. (2认同)
  • 将.idea添加到git ignore文件不符合目的,我不明白这个答案是如何得到那么多票.看看菲尔的答案如下,这是值得赞成的答案. (2认同)
  • 如果这是用Android Studio构建的,为什么要包含Eclipse文件? (2认同)
  • 此外,每次我将Android Studio从"单元测试"构建变体切换到"仪器测试"时,"app/app.iml"文件似乎都会发生变化.这应该取消至少"app/app.iml"的版本控制.(在Android Studio 1.1.0上注明) (2认同)

Phi*_*hil 148

基于我的普通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
Run Code Online (Sandbox Code Playgroud)

另请注意,正如所指出的,当您使用Android NDK构建自己的本机代码时,构建的本机文件部分非常有用.另一方面,如果您使用的是包含这些文件的第三方库,您可能希望从.gitignore中删除这些行(*.o和*.so).

  • 几乎是正确的.我不认为忽略*.so是一个好主意,因为您将无法处理在NDK库上链接了依赖项的项目.但是所有帐户都是一个非常好的起点! (10认同)

Sky*_*sey 80

2015年7月更新:

以下是JetBrains最终消息来源


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

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

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

分享以下内容时要小心:

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

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

  • gradle.xml文件,请参阅此讨论
  • 用户词典文件夹(以避免在其他开发人员具有相同名称时发生冲突)
  • .idea/libraries如果是从Gradle项目生成的 XML文件

旧项目格式(.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
Run Code Online (Sandbox Code Playgroud)

  • JetBrains已弃用DOC-1186并将其[更新的建议放在新帖子中](https://intellij-support.jetbrains.com/entries/23393067):DO INCLUDE:项目根目录下.idea目录下的所有文件除外workspace.xml和tasks.xml以及所有.iml文件.在共享产生签名版本(将包含密钥库密码),dataSources.ids和datasources.xml(它们可能包含密码)的Android工件时要小心.考虑因素排除:.idea/libraries下的gradle.xml,用户词典文件夹和XML文件(如果它们是从Gradle项目生成的). (5认同)
  • [维护者已将更改撤回到他自己的回购](https://github.com/github/gitignore/pull/798).它很快就会被拉入主人. (3认同)
  • 这是一个可爱的理论,但这对我们来说根本不起作用.我们始终以.iml文件结尾,其条目如下:`<orderEntry type ="jdk"jdkName ="1.6(38)"jdkType ="JavaSDK"/>`注意似乎不断增加的数字38.(misc.xml文件也有这个麻烦). (2认同)

the*_*ang 40

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

我忽略了:

我想几乎所有人都同意/build.

我厌倦了不断看到有关library.xmlGradle创建或删除的各种文件的消息/.idea.该build.gradle会在开发者的地方时,他们首先检查了项目运行的,那么为什么这些XML文件需要进行版本?/.idea当开发人员使用创建项目时,Android Studio还会生成其余部分Check out from Version Control,那么为什么该文件夹中的任何内容都需要进行版本化?

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

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

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

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

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

复制/粘贴方便:

.gradle
/build
/.idea
*.iml
local.properties
.DS_Store 
Run Code Online (Sandbox Code Playgroud)

  • 我的投票是为了你的gitignore,因为它非常像我的.几个建议:使用`build /`而不是`/ build`匹配模块构建目录,如`app/build`.使用`.gradle`匹配gradle缓存目录. (7认同)
  • 我同意你的回答.我也相信*.iml或.idea文件都不应该被版本化:http://stackoverflow.com/a/26290130/2948212 (4认同)

小智 36

我用这个.gitignore.我发现它在:http://th4t.net/android-studio-gitignore.html

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

*/build/

*~
*.swp
Run Code Online (Sandbox Code Playgroud)

  • 只是添加`build`为我工作. (3认同)

小智 34

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

  • *.iml
  • .理念
  • 建立

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

  • 暂时不要忽略.idea文件夹.Gradle插件还没有任何"gradle idea"任务,Android Studio中的导入项目现在远非完美. (15认同)
  • 谢谢你的解释.根据我的阅读,如果你要在项目中包含.idea,你应该忽略*/.idea/workspace.xml和*/.idea/tasks.xml (3认同)
  • 此外,如果您在团队中工作,请考虑忽略local.properties,因为它包含硬编码的sdk路径. (2认同)

小智 18

我的建议也是不要忽略.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可以加载文件和项目.我猜有些文件(profiles_settings.xml)对于Git和导入并不重要,但我很高兴它有效.


Wil*_*zel 18

如果使用Android Studio 3.2创建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
Run Code Online (Sandbox Code Playgroud)

我建议忽略完整的".idea"目录,因为它包含特定于用户的配置,对构建过程没有任何重要意义.

Gradle项目文件夹

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

app/
.git/
gradle/
build.gradle
.gitignore
gradle.properties
gradlew
gradle.bat
settings.gradle
Run Code Online (Sandbox Code Playgroud)

  • @Bilthon他们不是二进制文件.它们是Windows(gradle.bat)和Linux(gradlew)的gradle启动脚本. (2认同)
  • @Bilthon确实,他们是!它们是使用默认选项生成的.如果您更改了某些内容,它们应该包含在您的存储库中,以便在重新检查时正确构建它.它们太小了,总是保留它们并不会有什么坏处. (2认同)

Jac*_*cky 9

这是.gitignore通过这里生成通道的最佳方式


小智 8

我支持提交.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


ibe*_*dev 8

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

.idea/
.gradle/
*.iml
build/
local.properties
Run Code Online (Sandbox Code Playgroud)

因此,您可以相应地配置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()
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 那些负面投票的人应该提供这样做的正当理由.让我们/所有人知道我们的答案是否错误可能会有所帮助. (5认同)

Men*_*han 7

使用Android Studio 3.0进行测试

您可能需要安装.ignore插件.

您可以为Android自动生成.gitignore文件.右键单击文件夹并按照

添加.gitignore文件

然后从左侧面板中选择Android,然后单击Generate

生成.gitignore文件

Android Studio将生成.gitignore文件,其中包含需要忽略的所有文件.

摘自http://menukanows.com/how-to-add-gitignore-file-in-android-project/


小智 6

取决于您的项目格式的维护方式:

您有两种选择:

  1. 基于目录的格式(您将拥有一个.idea包含项目特定文件的文件夹)
  2. 基于文件的格式(配置文件是.iws.ipr)

参考:http: //www.jetbrains.com/idea/webhelp/project.html

提交版本控制的文件取决于以上内容:

  1. 包含.idea文件夹到版本控制,排除workspace.xmltasks.xml
  2. 版本控制.ipr文件和所有.iml模块文件,在.iws存储用户特定设置时排除文件.

参考:https: //intellij-support.jetbrains.com/entries/23393067


Von*_*onC 5

基本上是任何自动重新生成的文件。

一个很好的测试是克隆您的存储库,并查看Android Studio是否能够立即解释和运行您的项目(生成丢失的内容)。
如果不是,请查找缺少的内容,并确保忽略它,而是将其添加到存储库中。

话虽如此,您可以在现有.gitignore文件(例如Android one)上作为示例。

# 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

# Eclipse project files
.classpath
.project

# Proguard folder generated by Eclipse
proguard/

# Intellij project files
*.iml
*.ipr
*.iws
.idea/
Run Code Online (Sandbox Code Playgroud)

  • 这是不正确的。您应该检入* .iml文件,以及最可能的.idea和* .ipr文件。“任何自动生成的内容”部分尤其错误。毕竟,大多数Android项目都是自动生成的。 (11认同)
  • \ *。iml,\ *。idea和\ *。ipr是特定于Android Studio / IntelliJ的。不需要*来构建项目。由于它们是特定于IDE的,而不是特定于构建链的,因此可能不应该检入它们。每个人都可以使用任何IDE,例如,没有理由检入IntelliJ项目文件而不是Eclipse的文件。 (6认同)
  • 如果要处理同一个项目的多个分支,或者要与每个人都使用同一个IDE的团队一起工作,或者要对用于IDE的复杂设置进行版本控制,那么可以,应将文件检入。 IntelliJ的功能远不止用于在编辑器中打开代码的简单绒毛。 (2认同)
  • 为什么我和同事之间的iml文件不断显示?特别是external.root.project.path在&lt;module /&gt;标记下不断变化 (2认同)

Joh*_*Doe 5

从 Android Studio 0.8.4 开始,.gitignore启动新项目时会自动生成文件。默认情况下它包含:

.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
Run Code Online (Sandbox Code Playgroud)


Dan*_*aid 5

使用gitignore.io提供的 api ,可以得到自动生成的。这也是直接链接gitignore.io/api/androidstudio

### AndroidStudio ###
# Covers files to be ignored for android development using Android Studio.

# Built application files
*.apk
*.ap_

# Files for the ART/Dalvik VM
*.dex

# Java class files
*.class

# Generated files
bin/
gen/
out/

# Gradle files
.gradle
.gradle/
build/

# Signing files
.signing/

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

# Proguard folder generated by Eclipse
proguard/

# Log Files
*.log

# Android Studio
/*/build/
/*/local.properties
/*/out
/*/*/build
/*/*/production
captures/
.navigation/
*.ipr
*~
*.swp

# Android Patch
gen-external-apklibs

# External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild

# NDK
obj/

# IntelliJ IDEA
*.iml
*.iws
/out/

# User-specific configurations
.idea/caches/
.idea/libraries/
.idea/shelf/
.idea/workspace.xml
.idea/tasks.xml
.idea/.name
.idea/compiler.xml
.idea/copyright/profiles_settings.xml
.idea/encodings.xml
.idea/misc.xml
.idea/modules.xml
.idea/scopes/scope_settings.xml
.idea/dictionaries
.idea/vcs.xml
.idea/jsLibraryMappings.xml
.idea/datasources.xml
.idea/dataSources.ids
.idea/sqlDataSources.xml
.idea/dynamic.xml
.idea/uiDesigner.xml
.idea/assetWizardSettings.xml

# OS-specific files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

# Legacy Eclipse project files
.classpath
.project
.cproject
.settings/

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.war
*.ear

# virtual machine crash logs (Reference: http://www.java.com/en/download/help/error_hotspot.xml)
hs_err_pid*

## Plugin-specific files:

# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Mongo Explorer plugin
.idea/mongoSettings.xml

# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties

### AndroidStudio Patch ###

!/gradle/wrapper/gradle-wrapper.jar

# End of https://www.gitignore.io/api/androidstudio
Run Code Online (Sandbox Code Playgroud)