Чи слід тримати файли проекту під контролем версій? [зачинено]


87

Чи повинен я тримати файли проекту, такі як .project, .classpath, .set Eclipse, під контролем версій (наприклад, Subversion, GitHub, CVS, Mercurial тощо)?


Дивіться також stackoverflow.com/questions/1429125 / ...
VonC

12
Так дуже конструктивно
QED

Відповіді:


93

Ви хочете зберегти у контролі версій будь-які портативні файли налаштувань ,
тобто:
Будь-який файл, у якому немає абсолютного шляху.
Це включає:

  • .project,
  • .classpath ( якщо не використовується абсолютний шлях , що можливо із використанням змінних IDE або змінних середовища користувача)
  • Налаштування IDE (саме там я категорично не погоджуюсь із "прийнятою" відповіддю). Ці налаштування часто включають правила статичного аналізу коду, які життєво важливі для послідовного застосування для будь-якого користувача, який завантажує цей проект у свою робочу область.
  • Рекомендації щодо налаштувань IDE повинні бути записані у великий файл README (і, звичайно, версія).

Емпіричне правило для мене:
Ви повинні вміти завантажувати проект у робочу область і мати в ньому все необхідне, щоб правильно налаштувати його у своїй IDE та розпочати роботу за лічені хвилини.
Немає додаткової документації, wiki-сторінки для читання чи ні.
Завантажте, налаштуйте, ідіть.


@Rich: дякую. Для інших читачів, см відповідь Річа на те ж питання один рік по тому: stackoverflow.com/questions/1429125 / ...
VonC

3
ключова фаза "... іди за лічені хвилини ..."
Ерік Лабашоський,

3
Отже, у сховищі VC повинні бути файли конфігурації для кожної IDE? NetBeans, Eclipse, Emacs, vi, що завгодно? Я конкретно не погоджуюсь з думкою, що ці файли, оскільки розробник повинен нести відповідальність за створення власної IDE.
RHSeeger

3
@RH - "... повинен нести відповідальність за створення власної IDE". Це чудово, поки якийсь клоун не забуде встановити властивості стилю коду Eclipse .... і не перевірить вихідні файли з TAB. Grrrr !!
Stephen C

2
Я також не згоден - якщо ви використовуєте CI, кілька версій, платформи, IDE тощо, це суттєво розбиває СУХІСТЬ. Особливо оскільки різні плагіни / налаштування мають великий вплив на те, що тут опиняється.
jayshao,

30

Файли .project та .classpath так. Однак ми не зберігаємо наші налаштування IDE у контролі версій. Є деякі плагіни, які не спрацьовують належним чином на збереженні налаштувань, і ми виявили, що деякі налаштування були не дуже портативними з однієї машини розробника на іншу. Отже, ми маємо натомість сторінку Wiki, яка висвітлює кроки, необхідні розробнику для налаштування своєї IDE.


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

18

Це те, що я вважаю створеними файлами, і тому я ніколи не ставлю їх під контроль версій. Вони можуть відрізнятися від машини до машини та від розробника до розробника, наприклад, коли у людей встановлені різні плагіни Eclipse.

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


Якщо бути точним: mvn eclipse: eclipse створить відповідний .classpath та .project. Ви можете передати його -DdownloadSources = true та -DdownloadJavadocs = true.
Олександр Димитров

Ви також можете налаштувати плагін eclipse у своєму пам’яті, щоб завжди завантажувати джерела та javadoc.
Chris Vest

1
-1 Це працює, якщо ви ніколи не змінюєте налаштування проекту в IDE. І небезпека полягає в тому, що якщо ви їх зміните, ви не помітите, оскільки файли не мають версій. Тому я дуже спокушаюсь проголосувати за це. Робіть це лише для справді простих проектів, таких як ті, якими ви не збираєтесь ні з ким ділитися. У команді за замовчуванням зазвичай не працюють, і прохання кожного розробника змінити їх налаштування - це надійний рецепт хаосу.
Аарон Дігулла

Аароне, це працює, навіть якщо ти змінюєш файли проекту в IDE. Потім відбувається те, що ви не просуваєте зміни до своєї нічого не підозрюючої команди. Проекти IDE схильні містити конкретну інформацію про машини та розробників, яка не буде працювати для всіх. Я вважаю, що чим більше плагінів ви використовуєте, і чим складнішим стає використання IDE, тим гірше це стає. Люди повинні знати, як працюють їх інструменти, і контролювати їх конфігурацію. Я робити , проте, вважаю , що такий підхід не без його власного набору проблем.
Chris Vest

Крім того, виправлення конфліктів злиття, спричинених плагінами, які несерйозно редагують ці файли, досить швидко старіє.
Кріс Вест

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 + Maven, що використовує модуль m2eclipse. Ми маємо спільне середовище розробки, зі спільними каталогами, наскільки це можливо. Але іноді трапляється, що хтось спробує плагін, або змінить дрібниці у конфігурації, або імпортує другу робочу область для іншої гілки ...

Наша проблема полягає в тому, що генерація .project виконується під час імпортування проекту в Eclipse, але згодом не оновлюється у всіх випадках . Це сумно і, мабуть, не постійно, оскільки плагін m2eclipse покращиться, але це правда прямо зараз. Отож ми маємо різні конфігурації. Сьогодні ми мали таке: кілька натур було додано до багатьох проектів на якійсь машині, яка потім вела себе набагато інакше :-(

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

Примітка: у нашому випадку ми використовуємо відносні імена файлів, тому ми не маємо проблем спільно використовувати ці файли.

Отже, щоб відповісти на ваше запитання, я кажу так, зафіксуйте ці файли.


Мені також сподобалося:


"... змінює її пом за допомогою m2eclipse ..."? Яке відношення m2eclipse має до файлу pom? Звичайно, він використовує його, але зміни в pom повинні бути незалежними від плагіна.
RHSeeger

@RHSeeger Дякую, я покращу ясність цієї частини моєї відповіді.
KLE

0

Здається, ці файли проекту можуть змінюватися з часом під час роботи над проектом, тому так, я поміщаю їх під контроль версій.



0

Ми використовуємо IntelliJ IDEA і зберігаємо під контролем версій файли проекту ".sample" (.ipr) та модулі (.iml).

Дещо більша річ тут - спільне використання та повторне використання, ніж встановлення версій, IMHO. Але якщо ви збираєтесь поділитися цими конфігураціями, то що краще, щоб розмістити їх, ніж сховище, поруч із усім іншим.

Деякі переваги спільних та версійних файлів проекту:

  • Ви можете перевірити будь-який тег / гілку і швидко розпочати роботу над ним
  • Це полегшує новому розробнику спочатку налаштувати середовище розробки та пришвидшити роботу
  • Це краще дотримується СУХОГО, що завжди глибоко задовольняє. До цього всім розробникам доводилося періодично налаштовувати ці речі, по суті, повторюючи роботу. Звичайно, у кожного були свої власні маленькі способи уникнути повторення, але, дивлячись на команду в цілому, було багато дубльованих зусиль.

Зверніть увагу, що в IDEA ці файли містять такі конфігурації, як: що таке папки "source" і "test source"; все про зовнішні залежності (де знаходяться банки бібліотеки, а також пов'язані джерела або javadocs); параметри збірки тощо. Це речі, які не відрізняються від розробника до розробника (я з цим досить не згоден ). IDEA зберігає більше персональних налаштувань IDE в інших місцях, а також будь-які конфігурації плагінів. (Я не дуже добре знаю Eclipse; це може бути, а може і не зовсім).

Я погоджуюся з цією відповіддю, яка говорить:

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

І у нас це так, завдяки версійним файлам проектів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.