Глубокое погружение в папку .idea в Android Studio


Как и для многих разработчиков, папка .idea в Android Studio для меня всегда была, как черный ящик: я знал, что она существует, я знал, что её всегда добавляют в .gitignore, но я решил узнать, для чего же там нужны те или иные файлы и папки, чтобы у меня была возможность обрабатывать иногда возникающие git-конфликты, и для того, чтобы точно знать, какой файл можно безопасно добавить в .gitignore, а какой нет.


Разобрал я это на примере проекта, над которым работаю. И решил поделиться результатом того, что выяснил, т.к. не нашел никакой документации по этому вопросу.


указывает путь, который следует добавить в .gitignore


указывает путь, который Android Studio уже добавила в .gitignore, и вам не следует его версионировать.


указывает путь, который вы должны хранить в git.


assetWizardSettings.xml


Этот файл хранит последнюю иконку, добавленную с помощью интерфейса Android Studio. Его можно безопасно удалить из VCS.


Android Studio Wizard


caches


Кэши, как следует из названия, могут быть безопасно добавлены в .gitignore.


Не вижу никаких оснований держать его в VCS, но по умолчанию эта папка в .gitignore не добавлена.


caches/build_file_checksums.ser


По факту, этот файл представляет собой сериализированный экземпляр ProjectBuildFilesChecksums.


Файл необходим, чтобы проверить, изменились ли build.gradle, settings.gradle, local.properties, ~/.gradle/gradle.properties, gradle.properties или файлы build.gradle ваших модулей.


Android Studio использует этот файл для того, чтобы сообщить вам о том, что нужно синхронизировать gradle-файлы.


codeStyles


В этой папке содержатся настройки стилей кода проекта. Его полезно версионировать, если вы меняли стили кода по умолчанию.


dictionaries


Папка содержит запись, которую вы добавили в словарь для проверки кода. Этот словарь важен, если у вас есть строгие правила в вашей CI-системе.


gradle.xml


Рекомендую удалить этот файл из git. Он может содержать локальный путь к вашей версии gradle, а также путь к вашему модулю. Например, вы можете разработать модуль в отдельном репозитории, поэтому путь к модулю может быть специфичным для каждого пользователя.


По всем этим причинам я окончательно удаляю файл gradle.xml из VCS.


inspectionProfiles


Эта папка содержит конкретные Lint-правила для вашего проекта. Поэтому так же, как и папка dictionaries, она должна храниться в git.


libraries


Здесь содержится файл, который указывает, где хранятся jar-файлы ваших библиотек. Поскольку путь загрузки может быть специфичным для каждого пользователя, вы не должны хранить эту папку в VCS.


misc.xml


Файл содержит информацию о проекте: версия Java, тип проекта и др.


Эти сведения касаются проекта и не зависят от пользователя. Поэтому его следует хранить в git.


modules.xml


Этот файл содержит пути к .iml-файлам ваших модулей. Поэтому по аналогии с gradle.xml его нельзя хранить в git.


navEditor.xml


Здесь хранится расположение ваших элементов в редакторе навигации. Если эта информация имеет отношение к вашему проекту, то стоит сохранить этот файл в git. В противном случае смело добавляйте его в .gitignore, чтобы избежать конфликтов в будущем.


runConfigurations.xml


Имя файла может вам намекнуть, что в нём хранятся конфигурации, которые вы можете добавить, нажав «Изменить конфигурации». Этот файл обязательно нужно хранить в VCS.


Изменить конфигурации


vcs.xml


Этот файл содержит информацию о VCS, которую вы используете в своём проекте. Он используется для того, чтобы вы могли использовать графический интерфейс для выполнения операций, связанных с управлением версиями. Его тоже стоит добавить в git.


workspace.xml


Здесь содержится информация о вашем рабочем пространстве в Android Studio. Например, последняя позиция курсора на открытом вами файле. Так что это определенно пользовательская информация, которую нет необходимости хранить в git.


Итоги


Я бы предложил вам добавить всего три строки к файлу .gitignore по умолчанию:


/.idea/assetWizardSettings.xml
/.idea/gradle.xml
/.idea/caches
# Uncomment next line if keeping position of elements in Navigation Editor is not relevant for you
# /.idea/navEditor.xml

Как я уже сказал в начале этой статьи, я не нашёл никакой документации о содержимом папки .idea, поэтому статья может быть неполной и/или не точна на 100%. Если вы знаете ещё что-то, чего нет в этой статье, то пишите об этом в комменнтарии.

Комментарии (6)


  1. mikhailian
    13.09.2018 16:08

    В свете соседней темы про окрытые на чтение папки .git, интересно почитать, сколько таких же папок .idea.


  1. kalininmr
    13.09.2018 16:36

    у меня сложилось ощущение что часто бывают непонятные косяки, когда разными версиями его используешь.
    может быть не стоит его вобще в git?


    1. advance
      13.09.2018 17:19

      Лично я так не делаю и никому не советую коммитить .idea в git. Где-то слышал, что считается плохим тоном привязывать проект\исходники к ide подобным образом. Нет, конечно, есть специфичные проекты, которым это нужно, но это скорее исключения. В остальном за всё время существования студии было много раз проблемно открыть старый проект новой (иногда даже минорной) версией студии, импорт тоже помогает не всегда. Синхронизацию стилей можно иначе решить, но ИМХО- штатных стилей хватает за глаза


  1. voopr
    13.09.2018 17:58

    Интересное исследование, но мое мнение таково:
    Папка .idea является частью ВАШЕГО рабочего окружения и ей не место в VCS. Более того я бы добавил ее в исключения не в .gitignore проекта, а глобально, куда нибудь в ~/.gitexclude
    Другие члены команды могут использовать другю IDE для работы и эта папка для них будет вообще мусором.


    1. Tishka17
      13.09.2018 19:22

      Более того, Lint должен делаться на CI сервере. А ему скорее всего равно, что вы там в студии настроили, он тупо дёргает градл.


  1. NelGarbuzova
    14.09.2018 18:09

    Папки ide вообще не стоит добавлять в репозиторий. Если вы кодите в Idea или Android Studio, то это не значит, что кто-то из вашей команды будет делать также. А если даже вы работаете в одной IDE, настройки редактора у каждого могут быть свои. Решать, какие файлы из этой папки добавлять, а какие нет: пустая трата времени.
    Идеальный краткий вариант этой статьи: вообще ничего, что касается ide, не добавлять в репозиторий. Точка.