Как работать с файлами проектов IntelliJ IDEA в системе контроля версий Git, которые постоянно меняются? - PullRequest
145 голосов
/ 15 августа 2011

Каждый в нашей команде использует IntelliJ IDEA, и мы считаем полезным помещать его файлы проекта (.ipr и .iml) в систему контроля версий, чтобы мы могли обмениваться конфигурациями, настройками и проверками сборки. Кроме того, мы можем использовать эти параметры проверки на нашем сервере непрерывной интеграции с TeamCity. (У нас есть файл .iws рабочей области для пользователя в файле .gitignore, а не в системе контроля версий.)

Однако эти файлы мало меняются, когда вы делаете что-либо в IDEA. Для этого существует проблема в базе данных проблем IDEA ( IDEA-64312 ), поэтому, возможно, можно было бы считать это ошибкой в ​​IDEA, но с ней нам придется смириться в обозримом будущем.

До недавнего времени мы использовали Subversion, но недавно мы переключились на Git. Каждый из нас привык к тому, что у нас есть список изменений файлов проекта, который мы игнорировали и не регистрировали, если не было изменений файла проекта, которыми мы хотели поделиться с другими. Но с Git реальная сила, кажется, (из того, что мы исследуем) - это непрерывное ветвление, которое оно поощряет, и переключение между ветвями - это проблема с файлами проекта, которые всегда модифицировались. Часто он может просто каким-то образом объединить изменения и пытается справиться с изменениями файла проекта, которые теперь применяются к новой ветви. Однако, если новая ветвь изменила файлы проекта (например, ветвь работает над новым модулем, которого пока нет в других ветках), git просто выдает ошибку, что нет смысла объединять файлы когда обе ветви имеют изменения, и у вас есть изменения локально, и я могу скорее понять его смысл. Из командной строки можно использовать «-f» в команде «git checkout», чтобы заставить ее выбрасывать локальные изменения и использовать вместо этого ветви, но (1) команду Git Checkout GUI в IDEA (10.5.1) Похоже, у нас нет такой возможности, которую мы можем найти, поэтому нам нужно регулярно переключаться на командную строку, и (2) мы не уверены, что хотим использовать эту привычку пометить Git и выбросить наши локальные изменения.

Итак, вот некоторые мысли о вариантах, с которыми нам приходится иметь дело:

  1. Полностью вывести файлы проекта из-под контроля исходного кода. Поместите их в .gitignore и раздайте их каждому человеку и TeamCity другими способами, возможно, поместив их в систему контроля версий где-либо еще или под другими именами. Наша команда достаточно мала, и этот вариант достаточно выполним, чтобы рассмотреть, но он не выглядит великолепным.
  2. Продолжайте жить с этим, стараясь быть уверенными в том, какие файлы у нас есть, на какие ветви в данный момент времени. В связи с этим мы можем рекомендовать каждому разработчику иметь более одной копии каждого проекта в своей системе, чтобы каждый из них мог получить свою копию в другой ветви с возможно разными наборами файлов проекта.
  3. Попробуйте использовать только проект (.ipr) в системе контроля версий, а файлы модуля (.iml) не в системе управления версиями, а в файле .gitignore. Кажется, что главное, что само по себе регулярно переключается в .ipr, - это порядок общих конфигураций сборки, но, возможно, мы можем просто поделиться информацией отдельно о том, как их настроить. Я не совсем уверен, как IDEA справляется с такого рода вещами, имея только некоторые из его файлов, особенно при новой проверке.

Полагаю, я надеюсь, что есть какое-то очевидное (или неочевидное) решение, которое мы упустили, возможно, касающееся огромной настраиваемости, которую, похоже, имеют Git и IDEA. Но похоже, что мы не могли быть единственной командой, имеющей эту проблему. Вопросы, которые похожи на StackOverflow, включают 3495191 , 1000512 и 3873872 , но я не знаю, так как они точно такой же проблемы, и может быть, кто-то может придумать плюсы и минусы для различных подходов, которые я изложил, подходов, перечисленных в ответах на эти вопросы, или подходов, которые они рекомендуют.

Спасибо.

Ответы [ 6 ]

46 голосов
/ 15 августа 2011

Вы можете использовать структуру проекта IDEA , в которой настройки хранятся в каталоге .idea вместо файла .ipr. Это дает более детальный контроль над тем, что хранится в системе контроля версий. Файлы .iml по-прежнему будут присутствовать, поэтому они не решают случайные изменения в них (возможно, не допускают их контроля над исходным кодом?), Но совместное использование таких вещей, как стиль кода и профили проверки, является простым, поскольку каждый из них будет в своем собственном файле в каталоге .idea.

30 голосов
/ 17 сентября 2013

Из официального документа DOC: http://devnet.jetbrains.com/docs/DOC-1186

В зависимости от формата проекта IntelliJ IDEA (на основе файла .ipr или каталога .idea), вы должны поместить следующие файлы проекта IntelliJ IDEA в версиюcontrol:

.ipr формат файла

Предоставить общий доступ к файлу .ipr проекта и всем файлам модуля .iml, не делиться файлом .iws, поскольку он хранит пользовательские настройки.

Формат на основе каталога .idea

Совместно использовать все файлы в каталоге .idea в корневом каталоге проекта, кроме файлов workspace.xml и tasks.xml, в которых хранятся пользовательские настройки, а также все .iml.файлы модуля.

Я положил его в свой .gitignore:

#Project
workspace.xml
tasks.xml
23 голосов
/ 08 октября 2014

Официальный ответ доступен . Предполагая, что вы используете современный (и теперь по умолчанию) .idea формат проекта папки:

  • Добавить все ...
  • За исключением .idea/workspace.xml (что зависит от пользователя)
  • За исключением .idea/tasks.xml (который зависит от пользователя)
  • За исключением некоторых других файлов, которые могут содержать пароли / ключи / и т. Д. (Подробности см. Выше)

Этот пример файла .gitignore может быть полезной ссылкой, хотя вы все равно должны прочитать вышеуказанную ссылку, чтобы понять, почему появляются эти записи, и решить, нужны ли они вам.

Лично я также игнорирую файл .idea/find.xml, так как он, кажется, меняется каждый раз, когда вы выполняете операцию поиска.

16 голосов
/ 07 сентября 2011

Я вынул workspace.xml из системы контроля версий (+ добавлен в .gitignore).

10 голосов
/ 15 августа 2011

Наша команда не регистрирует файлы IntelliJ для конкретных путей.Мы предполагаем, что люди знают, как использовать IDE и настроить проект.Файлы IntelliJ попадают в «список игнорируемых» изменений.

ОБНОВЛЕНИЕ:

Теперь ответ проще, когда я использую Maven и его структуру каталогов по умолчанию.

Необходимо попросить IntelliJ игнорировать все файлы в папках /.svn, /.idea и /target.Все, что относится к индивидуальной информации о пути, хранится в /.idea.

Все остальное - это честная игра, которую можно посвятить Subversion или Git.

2 голосов
/ 12 января 2016

Просто чтобы поделиться другим подходом, использованным моей командой: просто переместите любые связанные с IDE файлы в другое место, где IntelliJ не распознает, и создайте сценарий, чтобы скопировать их в желаемое «активное» местоположение, которое игнорируется GIT.

Преимущество этого подхода заключается в том, что вы сохранили возможность обмениваться настройками IDE с помощью контроля версий. Единственным недостатком является то, что вы должны решить, когда запускать сценарий (возможно, один раз для каждого клона рабочей области или когда требуются изменения), и вы можете автоматизировать это, включив сценарий в процесс сборки или ловушку после слияния.

Этот подход основан на том, что IntelliJ выполняет поиск файлов настроек только в определенных местах, поэтому он также применяется к файлам конфигурации платформы. На самом деле мы игнорировали файл .properties Grails таким образом, чтобы разработчики не могли случайно зафиксировать свои локальные изменения конфигурации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...