Представляємо політиці розгалуження версій для управління невеликою командою


17

Я підрядник, який нещодавно почав з фірмою.

Команда - це 3 розробники, що складаються з 2-х молодших і середніх рівнів, з іншим на тому ж рівні, що починається незабаром, і я (6 років xp). Для обох існуючих розробників це їх перша робота поза університетом / коледжем, і вони ніколи не мали старшого розробника, який наглядав за їх роботою.

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

Я все це змінюю і ввожу сервери CI, TDD / тестування / виробництво тощо, а також політику управління версіями для компліменту.

Системою управління джерелами є TFS, якою я ніколи раніше не користувався. Він налаштований як одне гігантське сховище.

Я записав на них кілька покажчиків, але чи є ще щось, що я повинен додавати / виправляти, маючи на увазі досвід команди?

Політика управління версіями

Розробка робиться на багажнику

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

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

Якщо потрібно терміново виправити помилку, що впливає на виробничий код, тоді він буде зроблений на гілці випуску та об'єднаний назад у магістраль.

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

Якщо ми застосуємо окрему гілку за стратегією випуску, то магістраль НІКОЛИ не об'єднується у гілку Release

У деяких сценаріях може знадобитися виправити помилку двічі на різних гілках, якщо гілки розбіглися занадто багато. Якщо ми робимо короткі спринти, то це не повинно траплятися занадто часто.


Планую мати три сервери. Тестове середовище, у якому завжди працює останній код репо. Постановочне середовище, в якому працює найновіший кандидат випуску для постановки / тестування коду кандидата випуску та цілей UAT та виробничого середовища.

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

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


Коли я заздалегідь думаю, я вважаю, що галузь функції - це крок занадто далеко, і я її вилучу.

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

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


3
Ви розглядали можливість додати пояснення, чому ви вибрали саме цей шлях? скажімо, аналогічно тому, як це робиться тут . Також ви перевіряли "Посібник із розгалуження сервера Microsoft Team Foundation Foundation" (див., Наприклад, тут )?
гнат

3
Спробуйте це
gbjbaanb

1
Майте на увазі, що я використовую TFS не такий DVCS, як GIT. Це здається трохи git специфічним.
MrBliz

2
У кінці цього посилання йдеться: "Усі працюють з магістралі. Відділіться, коли ви випустите код. Відключіть реліз, коли вам потрібно створити виправлення помилок для вже випущеного коду. Відділення для прототипів." Я б запропонував, що для простого початку ви просто позначаєте теги, коли ви впевнені, що вони зроблені. Якщо у вас є кілька розробників, які працюють над декількома функціями, не потрібно мати більше ніж одне відділення. Усі додають функції, всі виправляють кандидата на реліз, всі погоджуються, коли він готовий до тегу. Це означає, що вам доведеться лише потім обробляти гілки для виправлення помилок.
TafT

1
Мені незручно ставити це як відповідь, тому що це занадто ґрунтується на думці, але я мав великий успіх, щоб переконати людей використовувати тег "останній відомий добрий" (LKG), який є рухомим тегом на стволі, що ідентифікує останнього "благословенного" "версія (CCB, тестування тощо). Розробникам кажуть, що випуски будуть зроблені з цього тегу LKG, а не з головки багажника, і крім того, вони вільні користуватися будь-якими підходами, які мають для них сенс у той час. Я знайшов цю схему для спонтанного генерування функціональних гілок, коли настає час, без попередніх зусиль та додаткових робіт над розробниками.
Корт Аммон - Відновіть Моніку

Відповіді:


16

Для команди, що складається з 3-4 дев, ви пропонуєте ЗАБЕЗПЕЧИТИ занадто багато гілок.

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

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

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

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

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

Також, що таке "регулярне злиття"? Щодня? Щотижня? Кожне злиття займає час - вам потрібно переконатися, що цільова гілка злиття будується та працює після змін. Для невеликого колективу часте злиття - це великі накладні витрати.

У нас є команда з 4 розробників, які працюють над кодовою базою ліній 1+ мільйонів, і ось як ми працюємо:

  • Головна галузь, де робиться весь розвиток
  • Одне відділення на основний випуск (робиться приблизно один раз на рік)

Одне головне правило: не перевіряйте код, який не створюється.

Це воно. Проста, зручна для розуміння, отримує необхідну нам ізоляцію (у будь-який час ми можемо створити збірку версій для будь-якої версії).

Переваги в тому, щоб усі роботи з розвитку були виконані на одній галузі:

  1. Розробники завжди синхронізуються між собою. Жодних больових злить, оскільки два розробники були тижнями у власних відділеннях тижнями, створюючи несумісні зміни.
  2. Зламані конструкції знайдені в той же день. У нас є нічна побудова, яка виконує останній код на основному. Якщо хтось перевірить код, який не побудує з якихось причин, ми дізнаємось одразу.
  3. Оскільки кожен завжди працює над одним і тим же кодом, збільшується шанс виявити помилку раніше, ніж пізніше.
  4. Для випуску гілок немає жодних накладних об'єднань, крім цільових виправлень. У невеликій команді це велика.

10
"Майте на увазі, що єдиною реальною вигодою для гілки є ізоляція коду. Це означає, що вам потрібна конкретна причина, щоб хотіти, щоб код був ізольований." - Як щодо перегляду коду? Я думаю, що це вагома причина навіть з двома дисками.
BlueRaja - Danny Pflughoeft

2
Огляд і розгалуження коду насправді не пов'язані. Ви хочете сказати, що ви не хочете, щоб код був зареєстрований у певній гілці, перш ніж його переглянути?
17 з 26

5
@ 17of26, так. Перегляд коду, як правило, використовується як необхідна умова бути в основній лінії. Таким чином, ви повинні показати код якось перед цим: на моніторі, в електронній пошті або - у багатьох налаштуваннях - на гілці. Найкраще це працює з інструментом управління репо, як GitHub або gerrit.
Пол Дрейпер

3
TFS підтримує перегляд коду через шевелюри, які є тимчасовими зонами утримування в контролі джерел. Код може жити там, поки його не переглянуть, а потім зареєструють.
17 з 26

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

31

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

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

Врешті-решт, змушення їх використовувати гілки може мати вкрай негативний вплив . Робота з магістраллю легко, особливо в умовах Agile. Розробник здійснює зміни в магістралі, врешті-решт, обробляючи невеликі конфлікти, і ці зміни негайно використовуються платформою Continuous Integration. З гілками:

  • Розробник повинен подумати, де слід змінити,

  • Хтось повинен керувати гілками і зливатися з гілок до стовбура,

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

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

Справа в тому, що:

Існуюча команда не знайома з розгалуженням

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


3
Ну а в цій моделі, як ви збираєтеся зупинити нестабільний код, щоб перейти до виробництва без розгалуження?
MrBliz

2
@MrBliz: через перемикачі. Ви можете активувати функцію для розробників, але відключити її для кінцевих користувачів, якщо вона не готова до RTM.
Арсеній Мурценко

3
Беручи до уваги досвід розробників, з якими я працюю, та нинішню відсутність автоматизованого тестування, я не думаю, що це було б гарною ідеєю для нашої ситуації.
MrBliz

4
@MrBliz ви зупиняєте нестабільний код, щоб потрапити на виробництво, виділивши його у відділеннях випуску (саме це їх призначення) та випробувавши його. Функціональні гілки не допомагають у цьому; насправді вони несуть більший ризик впровадження нестабільності великими, неінтегрованими, важко контрольованими злиттями
gnat

1
@MrBliz так, я помітив це (і я думаю, ви зрозуміли це правильно, якщо тільки пропустили пояснити міркування, щоб підтримати це). Просто ні ваш коментар, ні ця відповідь прямо не згадують, чи йдеться про релізи або гілки функцій (або і те й інше?), Тому я прокоментував, щоб наголосити на різниці . FWIW розпливчато з цього приводу - це, мабуть, єдине, що мені не подобається у цій відповіді
gnat

3

Як каже Маємма, будьте обережні з розгалуженням. Ви згадуєте розгалуження кожні кілька тижнів, чи справді потрібно мати багато гілок?

Крім того, ви також можете мати модель "тягнення" замість моделі "push". Якщо ви використовували Git або Mercurial, ви можете мати сервер інтеграції, щоб перевірити їх зміни, перш ніж переходити на центральний сервер. У TFS ви можете зробити щось подібне за допомогою закритих реєстрацій . Таким чином, ви можете мати валідацію та уникнути складності галузей.


Ефективно було б лише три активні гілки (випуск, кандидат на випуск та магістраль) у будь-який час, а більшість часу лише гілка випуску та магістраль.
MrBliz

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