Чи повинен я тримати файли проекту, такі як .project, .classpath, .set Eclipse, під контролем версій (наприклад, Subversion, GitHub, CVS, Mercurial тощо)?
Відповіді:
Ви хочете зберегти у контролі версій будь-які портативні файли налаштувань ,
тобто:
Будь-який файл, у якому немає абсолютного шляху.
Це включає:
Емпіричне правило для мене:
Ви повинні вміти завантажувати проект у робочу область і мати в ньому все необхідне, щоб правильно налаштувати його у своїй IDE та розпочати роботу за лічені хвилини.
Немає додаткової документації, wiki-сторінки для читання чи ні.
Завантажте, налаштуйте, ідіть.
Файли .project та .classpath так. Однак ми не зберігаємо наші налаштування IDE у контролі версій. Є деякі плагіни, які не спрацьовують належним чином на збереженні налаштувань, і ми виявили, що деякі налаштування були не дуже портативними з однієї машини розробника на іншу. Отже, ми маємо натомість сторінку Wiki, яка висвітлює кроки, необхідні розробнику для налаштування своєї IDE.
Це те, що я вважаю створеними файлами, і тому я ніколи не ставлю їх під контроль версій. Вони можуть відрізнятися від машини до машини та від розробника до розробника, наприклад, коли у людей встановлені різні плагіни Eclipse.
Натомість я використовую інструмент побудови (Maven), який може генерувати початкові версії цих файлів під час нового оформлення замовлення.
Я тут розірваний між двома варіантами.
З одного боку, я думаю, що кожна людина повинна вільно використовувати набір інструментів розробника, з якими вони найбільш продуктивні, якщо всі артефакти джерела зберігаються у контролі версій, а сценарій збірки (скажімо, 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
Ні, тому що я використовую лише файли контролю версій, які потрібні для створення програмного забезпечення. Крім того, окремі розробники можуть мати власні налаштування для конкретного проекту.
Ні, я важкий користувач Maven і використовую плагін Q for Eclipse, який створює та постійно оновлює .project та .classpath. Що стосується інших речей, таких як налаштування плагінів, я зазвичай маю README або Wiki-сторінку про це.
Також ті, з ким я працював, віддають перевагу іншим IDE, просто використовують плагіни Maven для створення файлів, необхідних для того, щоб їх IDE (і вони самі) були щасливими.
Це все, на мою думку, але найкращі практики за ці роки свідчать про те, що файли, характерні для даної IDE, не слід зберігати в контролі джерел, якщо тільки ваша вся організація не стандартизована на одній IDE, і ви ніколи не збираєтеся переключатися.
У будь-якому випадку, ви точно не хочете зберігати налаштування користувача - і .project може містити налаштування, які насправді стосуються розробника.
Я рекомендую використовувати щось на зразок Maven або Ant як стандартизовану систему складання. Будь-який розробник може отримати шлях до класу, налаштований у своїй IDE, за кілька секунд.
Хоча я загалом погоджуюся з підходом "не створювати версії файлів", у нас із цим виникають проблеми, і нам доведеться повернутися назад.
Примітка: Мене також цікавить відповідь VonC , зокрема щодо пункту "підняти Затьмарення за лічені хвилини". Але це не є вирішальним для нас.
Наш контекст - Eclipse + Maven, що використовує модуль m2eclipse. Ми маємо спільне середовище розробки, зі спільними каталогами, наскільки це можливо. Але іноді трапляється, що хтось спробує плагін, або змінить дрібниці у конфігурації, або імпортує другу робочу область для іншої гілки ...
Наша проблема полягає в тому, що генерація .project виконується під час імпортування проекту в Eclipse, але згодом не оновлюється у всіх випадках . Це сумно і, мабуть, не постійно, оскільки плагін m2eclipse покращиться, але це правда прямо зараз. Отож ми маємо різні конфігурації. Сьогодні ми мали таке: кілька натур було додано до багатьох проектів на якійсь машині, яка потім вела себе набагато інакше :-(
Єдиним рішенням, яке ми бачимо, є версія файлу .project (щоб уникнути ризиків, ми зробимо те саме для .classpath та .settings). Таким чином, коли один розробник змінює свій pom, локальні файли оновлюються за допомогою m2eclipse, усі вони виконуються разом, а інші розробники бачать всі зміни.
Примітка: у нашому випадку ми використовуємо відносні імена файлів, тому ми не маємо проблем спільно використовувати ці файли.
Отже, щоб відповісти на ваше запитання, я кажу так, зафіксуйте ці файли.
Мені також сподобалося:
Здається, ці файли проекту можуть змінюватися з часом під час роботи над проектом, тому так, я поміщаю їх під контроль версій.
Ми використовуємо IntelliJ IDEA і зберігаємо під контролем версій файли проекту ".sample" (.ipr) та модулі (.iml).
Дещо більша річ тут - спільне використання та повторне використання, ніж встановлення версій, IMHO. Але якщо ви збираєтесь поділитися цими конфігураціями, то що краще, щоб розмістити їх, ніж сховище, поруч із усім іншим.
Деякі переваги спільних та версійних файлів проекту:
Зверніть увагу, що в IDEA ці файли містять такі конфігурації, як: що таке папки "source" і "test source"; все про зовнішні залежності (де знаходяться банки бібліотеки, а також пов'язані джерела або javadocs); параметри збірки тощо. Це речі, які не відрізняються від розробника до розробника (я з цим досить не згоден ). IDEA зберігає більше персональних налаштувань IDE в інших місцях, а також будь-які конфігурації плагінів. (Я не дуже добре знаю Eclipse; це може бути, а може і не зовсім).
Я погоджуюся з цією відповіддю, яка говорить:
Ви повинні вміти завантажувати проект у робочу область і мати в ньому все необхідне, щоб правильно налаштувати його у своїй IDE та розпочати роботу за лічені хвилини. [...] Завантажте, налаштуйте, ідіть.
І у нас це так, завдяки версійним файлам проектів.