Чи варто турбуватися з гілками SVN, якщо у вас є лише колись?


10

Якщо ми працюємо лише з однією гілкою в Subversion, чи варто навіть турбуватися? Чи не можемо ми просто працювати на багажнику, щоб пришвидшити справи?

Ось як ми розвиваємось із Subversion:

  • Є стовбур
  • Ми робимо нову галузь розвитку
  • Ми розробляємо нову особливість у цій галузі
  • Коли функція виконана, вона об'єднується в стовбур, гілка видаляється і з стовбура робиться нова гілка розвитку

Коли ми хочемо випустити на виробництво, ми робимо бирку з магістралі. Виправлення помилок зроблені на гілці з цього тегу. Потім ця помилка об'єднується в багажник.

Ось чому ми робимо нову галузь розвитку після того, як функція буде виконана. Таким чином, виправлення буде включено досить швидко до нашого нового коду.

Нижче наведена схема, яка повинна уточнити:

Наша стратегія підриву

Тепер є відчуття, що це не найефективніший спосіб роботи. Ми будуємо локально, перш ніж ми здійснюватимемо, що займає приблизно 5-10 хвилин. Ви можете зрозуміти, що це відчувається як досить тривалий час очікування.

Ідея галузі розвитку полягає в тому, що магістраль завжди готова до випуску. Але це вже не так у нашій ситуації. Іноді функція майже готова, і деякі розробники вже почнуть кодувати наступну функцію (інакше вони будуть сидіти навколо, чекаючи, коли один або два розробники закінчать і об'єднаються).

Потім, коли функція 1 закінчена, вона об'єднується в магістраль, але включається деякі елементи функції 2.

Отже, чи варто навіть турбуватися з галуззю розвитку, оскільки у нас є лише одна галузь? Я читав про розробку на основі магістралей та абстрагування, але в більшості статей я зосереджувався на частині відгалуження. У мене складається враження, що це стосується великих змін, які охоплюватимуть декілька випусків. Це не проблема у нас.

Як ти гадаєш? Чи можемо ми просто працювати на багажнику? Найгіршим сценарієм є (я думаю), що нам доведеться зробити тег із стовбура та вибрати потрібні нам документи, оскільки деякі елементи / функції ще не готові до виробництва.


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

Гілка кожної функції, схоже, ускладнює її, тоді як ми намагаємось зменшити складність. Крім того, якщо є виправлення (тобто для 1,0), це можна зробити на гілці, зробленій з тегу. Тоді ми можемо позначити цю гілку (склавши 1.1), звільнити її та об'єднати виправлення в стовбур. Розвиток великої функції триватиме на багажнику.
Пітер

Відповіді:


6

IMHO працює безпосередньо над магістраллю - це добре, якщо ви можете здійснювати невеликі кроки і у вас постійно інтегрується, тож ви можете переконатися (в розумній мірі), що ваші зобов’язання не порушують існуючу функціональність. Ми це робимо і в нашому поточному проекті (адже я не працював ні в одному проекті, використовуючи гілки, визначені для завдання, за замовчуванням).

Ми створюємо гілку лише до випуску або якщо функція потребує тривалого часу (тобто охоплює кілька ітерацій / випусків). Приблизний розмір завдання майже завжди можна оцінити досить добре, щоб ми заздалегідь знали, чи потрібна для цього окрема гілка. Ми також знаємо, скільки часу залишилося до наступного випуску (ми публікуємо випуски приблизно на кожні 2 місяці), тому легко зрозуміти, чи відповідає завдання чи час, доступний до наступного випуску. Якщо ви сумніваєтесь, ми відкладаємо її до створення гілки випуску, тоді добре почати працювати над нею на магістралі. Поки нам потрібно було створити галузь, що відповідає завданням, лише один раз (приблизно за 3 роки). Звичайно, ваш проект може бути різним.


1
Я з Пітером. Ми маємо відділення для кожного підтримуваного випуску, але в іншому випадку працюємо в магістралі. Ми також використовуємо безперервну інтеграцію, але пам’ятайте, що це означає лише, що вона буде компілювати, а не те, що вона не порушила існуючу функціональність, навіть за допомогою тестів на одиницю.
Ян

@Ian, звичайно, жоден тест не може гарантувати, що код на 100% відсутній помилок ... маючи обмежені ресурси, ми прагнемо до розумного рівня безпеки (визначення якого залежить від домену та проекту). Зауважте також, що CI може також запускати інтеграцію тощо. Тести, а не лише одиничні тести.
Péter Török

Це працює, поки не вийде з ладу. Якщо вам потрібно застосувати виправлення до того, як нова функція буде готова ... Або якщо новий випуск функції не буде таким готовим до прайм-тайму, як ви думали, повернути цю зміну з коду стає набагато важче, якщо ви не використовуєте розгалуження.
SoylentGray

@Chad, виправлення останнього випуску виконуються на відповідній гілці випуску, без втручання з боку магістралі. І ми перевіряємо нові функції досить широко, тому ми знаємо, коли вони готові до прайм-тайму. Звичайно, ми маємо відносно мало великих можливостей у нашому проекті. А оскільки це веб-додаток на сервері, досить легко навіть додати прапор БД для вибіркового включення / вимкнення функцій. YMMV.
Péter Török

LOL ок, я неправильно зрозумів і подумав, що у вас просто багажник (за винятком) Я використав цей метод, а також його штраф для невеликої групи та часті невеликі випуски, він не працював добре для нас, роблячи великі випуски регулярно (3-6 місяців ) інтевалі.
SoylentGray

1

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

Іншим способом зробити це, - це створити стандартну магістраль за замовчуванням, але створити гілку, якщо ви очікуєте, що ваше завдання поширюється на наступний реліз. Ви завжди позначаєте тег випуску звичайно.

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


Я погоджуюся, і ОП підтвердило це тим, що: «Іноді функція майже готова, і деякі розробники вже почнуть кодувати наступну функцію ...»
Кріс

Так, але нам ніколи не доводиться рекомідувати. Особливості реалізовані хронологічно, і, наприклад, функції 1-4 всі мають бути в наступному випуску (скажімо, 1.0). Єдиний час, коли це може бути проблематичним, це коли розробка розпочалася за функцією 5, яка є для випуску після цього (2.0). Тоді ми повинні переконатися, що ці зміни не були прийняті в тег / реліз (1.0). Створення філії до виходу справді могло це виправити.
Пітер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.