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

https://proandroiddev.com/deep-dive-into-idea-folder-in-android-studio-53f867cf7b70
  • Перевод

Глубокое погружение в папку .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%. Если вы знаете ещё что-то, чего нет в этой статье, то пишите об этом в комменнтарии.

  • +25
  • 7,5k
  • 9
Поделиться публикацией
Комментарии 9
    0

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

      0
      у меня сложилось ощущение что часто бывают непонятные косяки, когда разными версиями его используешь.
      может быть не стоит его вобще в git?
        0
        Лично я так не делаю и никому не советую коммитить .idea в git. Где-то слышал, что считается плохим тоном привязывать проект\исходники к ide подобным образом. Нет, конечно, есть специфичные проекты, которым это нужно, но это скорее исключения. В остальном за всё время существования студии было много раз проблемно открыть старый проект новой (иногда даже минорной) версией студии, импорт тоже помогает не всегда. Синхронизацию стилей можно иначе решить, но ИМХО- штатных стилей хватает за глаза
        +4
        Интересное исследование, но мое мнение таково:
        Папка .idea является частью ВАШЕГО рабочего окружения и ей не место в VCS. Более того я бы добавил ее в исключения не в .gitignore проекта, а глобально, куда нибудь в ~/.gitexclude
        Другие члены команды могут использовать другю IDE для работы и эта папка для них будет вообще мусором.
          0

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

            0
            По-моему проблематично переносить код из одной ide в другую
            Для команды логичнее бы использовать одну среду разработки
            Единственно в чем согласен, должны быть индивидуальные настройки размера текста, фон и тд
            Но это не исключается каких-то общих настроек проекта под определенное окружение
              0
              Для команды логичнее бы использовать одну среду разработки

              Логичнее, но мир не совершенен.
              На проекте, в котором я сейчас участвую, используются все три популярные IDE.
            +1
            Папки ide вообще не стоит добавлять в репозиторий. Если вы кодите в Idea или Android Studio, то это не значит, что кто-то из вашей команды будет делать также. А если даже вы работаете в одной IDE, настройки редактора у каждого могут быть свои. Решать, какие файлы из этой папки добавлять, а какие нет: пустая трата времени.
            Идеальный краткий вариант этой статьи: вообще ничего, что касается ide, не добавлять в репозиторий. Точка.
              0
              В своих проектах тоже помещаю папку .idea в .gitignore. Тем не менее, интересует папка codeStyles. Если её хранить в git, то AS будет брать настройки code styles для XML оттуда? А то при каждом старте AS они сбрасываются до по умолчанию.

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

              Самое читаемое