Следует ли мне держать файлы проекта под контролем версий? [закрыто]


87

Должен ли я хранить файлы проекта, такие как Eclipse .project, .classpath, .settings, под контролем версий (например, Subversion, GitHub, CVS, Mercurial и т. Д.)?



12
Очень конструктивно
QED

Ответы:


93

Вы действительно хотите сохранить в системе контроля версий любые переносимые файлы настроек , то
есть:
любой файл, в котором нет абсолютного пути.
Это включает:

  • .project,
  • .classpath ( если не используется абсолютный путь , что возможно с использованием переменных IDE или переменных среды пользователя)
  • Настройки IDE (здесь я категорически не согласен с «принятым» ответом). Эти настройки часто включают правила статического анализа кода, которые жизненно важны для последовательного применения для любого пользователя, загружающего этот проект в свою рабочую область.
  • Рекомендации по конкретным настройкам IDE должны быть записаны в большом файле README (и, конечно же, с контролем версий).

Практическое правило для меня:
вы должны иметь возможность загрузить проект в рабочее пространство и иметь в нем все необходимое, чтобы правильно настроить его в своей среде IDE и начать работу за считанные минуты.
Никакой дополнительной документации, вики-страниц для чтения или чего-то еще.
Загрузите, настройте, вперед.


@Rich: спасибо. Для других читателей см. Ответ Рича на тот же вопрос год спустя: stackoverflow.com/questions/1429125/…
VonC

3
ключевая фаза «… приступим в считанные минуты…»
Эрик Лабашовский

3
Итак, в репозитории VC должны быть файлы конфигурации для каждой IDE? NetBeans, Eclipse, Emacs, vi или что-то еще? Я специально не согласен с идеей, что эти файлы потому, что разработчик должен нести ответственность за настройку своей собственной IDE.
RHSeeger

3
@RH - "... должен отвечать за настройку собственной IDE". Это нормально, пока какой-нибудь клоун не забудет установить свойства стиля кода Eclipse ... и не проверит исходные файлы с вкладками в них. Гррр !!
Stephen C

2
Я также не согласен - если вы используете CI, несколько версий, платформ, IDE и т. Д., Это очень сильно нарушает DRY. Esp. поскольку разные плагины / настройки имеют большое влияние на то, что здесь заканчивается.
jayshao

30

Файлы .project и .classpath да. Однако мы не храним наши настройки IDE в системе контроля версий. Есть некоторые плагины, которые плохо справляются с сохранением настроек, и мы обнаружили, что некоторые настройки не очень переносимы с одной машины разработчика на другую. Итак, вместо этого у нас есть страница Wiki, на которой описаны шаги, необходимые разработчику для настройки своей IDE.


2
-1 Я бы посоветовал отправлять отчеты об ошибках для этих плагинов, вместо того, чтобы позволять им тратить время тысяч людей. А затем я бы поместил все стабильные файлы настроек в систему контроля версий и урезал эту страницу Wiki до костей.
Аарон Дигулла

18

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

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


Чтобы быть точным: mvn eclipse: eclipse сгенерирует соответствующие .classpath и .project. Вы можете передать его -DdownloadSources = true и -DdownloadJavadocs = true.
Александр Димитров,

вы также можете настроить плагин eclipse в своем pom, чтобы всегда загружать источники и javadoc.
Крис Вест,

1
-1 Это работает до тех пор, пока вы никогда не меняете настройки проекта в своей IDE. И опасность в том, что если вы их измените, вы не заметите, потому что файлы не версируются. Так что мне очень хочется проголосовать против этого. Делайте это только для действительно простых проектов, вроде тех, которыми вы ни с кем не собираетесь делиться. В команде настройки по умолчанию обычно не работают, и просьба к каждому разработчику изменить свои настройки - верный рецепт хаоса.
Аарон Дигулла

Аарон, это работает, даже если вы меняете файлы проекта в своей среде IDE. Что происходит дальше, так это то, что вы не передаете свои изменения ничего не подозревающей команде. Проекты IDE часто содержат информацию, специфичную для компьютеров и разработчиков, которая не подойдет всем. Я считаю, что чем больше плагинов вы используете и чем сложнее становится использование IDE, тем хуже становится. Люди должны знать, как работают их инструменты, и контролировать их конфигурацию. Я делать , однако, считаю , что такой подход не без его собственного набора проблем.
Крис Вест

Кроме того, исправление конфликтов слияния, вызванных плагинами, которые легкомысленно редактируют эти файлы, довольно быстро устаревает.
Крис Вест

7

Здесь я разрываюсь между двумя вариантами.

С одной стороны, я думаю, что каждый должен иметь право использовать набор инструментов разработки, с которыми он наиболее продуктивен, при условии, что все исходные артефакты хранятся в системе контроля версий, а сценарий сборки (скажем, ANT или Maven) обеспечивает соответствие стандартам посредством точное указание того, какой JDK использовать, от каких версий каких сторонних библиотек зависеть, выполнение проверок стиля (например, checkstyle), запуск модульных тестов и т. д.

С другой стороны, я думаю, что очень многие люди используют одни и те же инструменты (например, Eclipse), и часто гораздо лучше стандартизировать некоторые вещи во время разработки, а не во время сборки - например, Checkstyle гораздо полезнее как плагин Eclipse, чем как задача ANT или Maven - что лучше стандартизировать по набору средств разработки и общему набору плагинов.

Я работал над проектом, в котором все использовали один и тот же JDK, одну и ту же версию Maven, одну и ту же версию Eclipse, один и тот же набор плагинов Eclipse и одинаковые файлы конфигурации (например, профили Checkstyle, правила форматирования кода и т. Д.). Все это хранилось в системе управления версиями - .project, .classpath и все в папке .settings. Это очень облегчило жизнь на начальных этапах проекта, когда люди постоянно настраивали зависимости или процесс сборки. Это также очень помогло при добавлении новых участников в проект.

В целом, я думаю, что если вероятность религиозной войны невелика, вам следует стандартизировать базовый набор инструментов разработки и подключаемых модулей и обеспечить соответствие версии в ваших сценариях сборки (например, явно указав версию Java). не думайте, что хранение JDK и установки Eclipse в системе контроля версий дает много преимуществ. Все остальное, что не является производным артефактом, включая файлы вашего проекта, конфигурацию и настройки плагина (в частности, средство форматирования кода и правила стиля), должно перейти в систему управления версиями.

PS Если вы используете Maven, есть аргумент в пользу того, что файлы .project и .classpath являются производными артефактами. Это верно только в том случае, если вы генерируете их каждый раз, когда делаете сборку, и если вам никогда не приходилось настраивать их вручную (или случайно изменять их, изменяя некоторые настройки) после создания их из POM


6

Нет, потому что я использую только файлы контроля версий, необходимые для сборки программного обеспечения. Кроме того, у отдельных разработчиков могут быть собственные настройки для конкретного проекта.


5

Нет, я интенсивно использую Maven и использую плагин Q for Eclipse, который создает и обновляет .project и .classpath. Для других вещей, таких как настройки плагинов, я обычно веду README или Wiki-страницу об этом.

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


5

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

В любом случае вам определенно не нужно сохранять пользовательские настройки - и .project может содержать настройки, которые действительно зависят от разработчика.

Я рекомендую использовать что-то вроде Maven или Ant в качестве стандартизированной системы сборки. Любой разработчик может настроить путь к классам в своей IDE за несколько секунд.


1

Да, кроме папки .settings. Для нас хорошо работает фиксация других файлов. Существует аналогичный вопрос здесь .


1

Хотя я в целом согласен с подходом «не версии сгенерированных файлов», у нас есть проблемы с ним, и мы должны вернуться к нему.

Примечание: меня также интересует ответ VonC , особенно по поводу пункта «получить Eclipse в течение нескольких минут». Но для нас это не имеет решающего значения.

Наш контекст - Eclipse + Maven, использующий плагин m2eclipse. У нас есть общая среда разработки, с максимально общими каталогами. Но бывает, что кто-то пробует плагин, или меняет мелочи в конфигурации, или импортирует вторую рабочую область для другой ветки ...

Наша проблема в том, что создание .project выполняется при импорте проекта в Eclipse, но не во всех случаях впоследствии обновляется . Это печально и, вероятно, не навсегда, поскольку плагин m2eclipse улучшится, но сейчас это правда. Таким образом, мы получаем разные конфигурации. То, что у нас было сегодня, заключалось в том, что во многие проекты на какой-то машине было добавлено несколько натур, которые затем вели себя по-другому :-(

Единственное решение, которое мы видим, - это версия файла .project (чтобы избежать рисков, мы сделаем то же самое для .classpath и .settings). Таким образом, когда один разработчик меняет свой pom, локальные файлы обновляются с помощью m2eclipse, все они фиксируются вместе, и другие разработчики будут видеть все изменения.

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

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


Мне также понравилось:


"... меняет помпон с помощью m2eclipse ..."? Какое отношение имеет m2eclipse к pom-файлу? Конечно, он его использует, но изменения в pom не должны зависеть от плагина.
RHSeeger

@RHSeeger Спасибо, я уточню эту часть своего ответа.
KLE

0

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



0

Мы используем IntelliJ IDEA и держим версии файлов проекта (.ipr) и модулей (.iml) с расширением .sample под контролем версий.

ИМХО , здесь есть нечто большее, чем совместное использование и повторное использование, чем управление версиями. Но если вы собираетесь поделиться этими конфигурациями, что может быть лучше для их размещения, чем репозиторий, рядом со всем остальным.

Некоторые преимущества общих и версионных файлов проекта:

  • Вы можете проверить любой тег / ветку и быстро начать работу над ним
  • Облегчает новому разработчику сначала настроить среду разработки и приступить к работе
  • Это лучше соответствует DRY, что всегда приносит глубокое удовлетворение. До этого всем разработчикам приходилось время от времени настраивать эти вещи, фактически выполняя повторяющуюся работу. Конечно, у каждого были свои маленькие способы избежать повторения, но, глядя на команду в целом, было много дублированных усилий.

Обратите внимание, что в IDEA эти файлы содержат такие конфигурации, как: каковы каталоги «исходный код» и «исходный код теста»; все о внешних зависимостях (где расположены jar-файлы библиотек, а также связанные источники или javadocs); варианты сборки и т. д. Это вещи, которые не меняются от разработчика к разработчику (я категорически с этим не согласен ). IDEA хранит больше личных настроек IDE в другом месте, а также любые конфигурации плагинов. (Я не очень хорошо знаю Eclipse; это может быть совсем другое, а может и нет.)

Я согласен с этим ответом, который гласит:

Вы должны иметь возможность загрузить проект в рабочую область и иметь в нем все необходимое, чтобы правильно настроить его в своей среде IDE и начать работу за считанные минуты. [...] Загрузите, настройте, вперед.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.