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 #Since Android Studio 3.0 #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+看来,你可以提交和推* .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)。

更新7/2015:

这里是JetBrains的权威来源


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

所有最新的IDE版本默认使用这种格式。 以下是您需要分享的内容:

  • 项目根目录下的.idea目录下的所有文件, 除了存储用户特定设置的workspace.xmltasks.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
  • /.idea (可能有例外,请参阅dalewking的回答 )
  • *.iml
  • local.properties

我认为几乎每个人都赞成/build

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

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

local.properties文件指向SDK的文件系统的绝对路径,所以绝对不应该版本化。

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

编辑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确实加载了所有的文件,但不能将项目“看到”项目。 我只能打开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和导入,但我只是很高兴它的工作。

没有必要添加到源代码管理下面的任何一个:

 .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工作室将生成.idea文件夹(包括workspace.xml,因为它生成时不应该在源代码管理中)和.gradle文件夹的内容。

这种方法对于Eclipse而言非常友好,因为源代码控件并不知道Android Studio的任何内容。 Android Studio只需要build.gradle就可以导入一个项目并生成其余的内容。

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

对于Android Studio 2.3(我也用它2.1和2.2)我使用以下:

的.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 

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

取决于你的项目格式如何维护:

你有两种选择:1)基于目录的格式(你将有一个包含项目特定文件的.idea文件夹)2)基于文件的格式(配置文件是.iws和.ipr)

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

提交到版本控制的文件取决于以上内容:1)将.idea文件夹包含到版本控制中,排除workspace.xml和tasks.xml 2)版本控制.ipr文件和所有.iml模块文件,将.iws文件排除为它存储用户特定的设置。

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

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

 .gradle /local.properties /.idea/workspace.xml /.idea/libraries .DS_Store /build 

基本上任何文件都会自动重新生成。

一个好的测试是克隆你的回购,看看Android Studio是否能够解释和立即运行你的项目(产生缺少的东西)。
如果没有,找到缺少的东西,并确保它被忽略,但添加到回购。

这就是说,你可以采取现有的.gitignore文件,如Android的例子。

 # 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/ 

我喜欢添加.iml文件和Intellij sez添加.idea文件夹,但忽略.idea / workspace.xml和.idea / tasks.xml,但是.idea / libraries /?

我不明白这是多么有道理。 它有一个列出Android Studio项目应该知道的库的XML文件列表。 这些应该来自build.gradle定义的依赖 – 而不是IDE项目文件。

其中一个文件的内容如下所示:

 <component name="libraryTable"> <CLASSES> <root url="jar://$USER_HOME$/.gradle/caches/artifacts-26/filestore/com.example/example/etc...jar!"/> 

这是没有意义的。 如果用户为gradle指定了不同的home目录,或者如果他们使用不同的gradle版本,那么.gradle/caches/artifacts-xxx下的路径将不同于它们(即, artifacts-结尾添加的数字将会与您正在使用的gradle版本相关。)这些路径不是通用的,但建议是检查所有这些?

我知道这是一个老话题,当然有很多选择,但我更喜欢Simon Whitaker的gibo 。 它使用起来非常简单,跨平台(mac,* nix和windows),并使用github gitignore回购,所以它(基本上)总是最新的。

确保您的本地缓存是最新的:

  $ gibo --upgrade From https://github.com/github/gitignore * branch master -> FETCH_HEAD Current branch master is up to date. 

搜索您需要的语言/技术:

  $ gibo --search android Android 

显示.gitignore文件:

  $ gibo Android ### Android # Built application files *.apk *.ap_ # Files for the Dalvik VM *.dex # Java class files *.class # Generated files bin/ gen/ # Gradle files .gradle/ build/ # Local configuration file (sdk path, etc) local.properties # Proguard folder generated by Eclipse proguard/ # Log Files *.log 

现在,将其追加到您项目的.gitignore文件中:

  $ gibo Android >> .gitignore 

(确保你使用>>来追加到你项目的.gitignore文件中,一个会覆盖它 – 就像我在事故中做了很多次一样!)

我知道这不是回答OP的确切问题,但使用gibo使得你几乎不必考虑“问题”了! .. 这真好! ;)

为了得到更好的想法,你需要的是以下文件

  • 应用
  • 的build.gradle
  • settings.gradle

基本的Android项目结构

你可以把所有的东西放在.gitignore文件中。 所有的应用程序更改主要在这些文件和文件夹。 您在基本项目中看到的其余部分是gradle构建文件或Android Studio配置文件。

如果您使用的是Android Studio,则可以使用“导入项目”成功构建项目。 或者,您可以使用命令行构建,使用Gradle构建Android项目 。

最好在整个开发过程中添加.gitignore列表,以避免因版本控制从某处预定义(复制/粘贴)列表而导致版本控制无法正常工作时出现未知副作用。 对于我的一个项目,忽略列表只是:

 .gradle .idea libs obj build *.log 

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

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

我同意这个说法,但是我修改这个文件来改变/构建生成/(这将包括/构建和/应用程序/构建)所以我没有最终的应用程序/构建在我的存储库中的所有文件。

另请注意,如果您从Eclipse导入项目,则不会为您复制或“自动”创建.gitignore。

我合并Github .gitignore文件

  • Android.gitignore
  • JetBrains.gitignore
 ### Github Android.gitignore ### # Built application files *.apk *.ap_ # Files for the Dalvik VM *.dex # Java class files *.class # Generated files bin/ gen/ # Gradle files .gradle/ build/ # Local configuration file (sdk path, etc) local.properties # Proguard folder generated by Eclipse proguard/ # Log Files *.log # Android Studio Navigation editor temp files .navigation/ # Android Studio captures folder captures/ ### Github JetBrains.gitignore ### # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio *.iml ## Directory-based project format: .idea/ # if you remove the above rule, at least ignore the following: # User-specific stuff: # .idea/workspace.xml # .idea/tasks.xml # .idea/dictionaries # Sensitive or high-churn files: # .idea/dataSources.ids # .idea/dataSources.xml # .idea/sqlDataSources.xml # .idea/dynamic.xml # .idea/uiDesigner.xml # Gradle: # .idea/gradle.xml # .idea/libraries # Mongo Explorer plugin: # .idea/mongoSettings.xml ## File-based project format: *.ipr *.iws ## Plugin-specific files: # IntelliJ /out/ # mpeltonen/sbt-idea plugin .idea_modules/ # JIRA plugin atlassian-ide-plugin.xml # Crashlytics plugin (for Android Studio and IntelliJ) com_crashlytics_export_strings.xml crashlytics.properties crashlytics-build.properties 

请阅读: JetBrains支持:如何管理版本控制系统下的项目

Github为各种项目维护有用的gitignore项目。 这里是Android项目的有用的gitignore项目列表。

 # Built application files *.apk *.ap_ # Files for the ART/Dalvik VM *.dex # Java class files *.class # Generated files bin/ gen/ out/ # Gradle files .gradle/ build/ # Local configuration file (sdk path, etc) local.properties # Proguard folder generated by Eclipse proguard/ # Log Files *.log # Android Studio Navigation editor temp files .navigation/ # Android Studio captures folder captures/ # Intellij *.iml .idea/workspace.xml .idea/tasks.xml .idea/gradle.xml .idea/libraries # Keystore files *.jks # External native build folder generated in Android Studio 2.2 and later .externalNativeBuild # Google Services (eg APIs or Firebase) google-services.json # Freeline freeline.py freeline/ freeline_project_description.json 

github中的Android Gitignore

JetBrains支持的这个官方文档应该包括以下内容:

 All files under .idea directory except workspace.xml and tasks.xml because they store specific user settings All the *.iml files that can be located in different module directories 

It also gives other recommendations of things to be careful about.

Compilation:

 #built application files *.apk *.ap_ # files for the dex VM *.dex # Java class files *.class # generated files bin/ gen/ # Gradle files .gradle/ build/ /*/build/ # Local configuration file (sdk path, etc) local.properties # Proguard folder generated by Eclipse proguard/ # Log Files *.log # Windows thumbnail db Thumbs.db # OSX files .DS_Store # Eclipse project files .classpath .project # Android Studio *.iml .idea #.idea/workspace.xml - remove # and delete .idea if it better suit your needs. .gradle build/ # Intellij project files *.iml *.ipr *.iws .idea/ 

I had problems with ignoring build files, but this seems to work 🙂

 # 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 # Android Studio .idea/ .gradle /*/local.properties /*/out /*/*/build /*/*/production *.iml *.iws *.ipr *~ *.swp */build */production */local.properties */out