Чи неправильно моя компанія, що об'єднує філії?


28

Нещодавно я натрапив на статтю MSDN про розгалуження та злиття та SCM: Branching and Merging Primer - Chris Birmele .

У статті вони говорять про те, що "велике злиття вибуху" є антипатерном:

Злиття великого вибуху - відстрочка гілки, що зливається до кінця зусиль із розвитку, та спроба об'єднання всіх гілок одночасно.

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

Я працюю в дуже невеликій компанії з однією людиною, яка виступає в якості остаточного огляду + повноваження злиття магістралі. У нас є 5 розробників (включаючи мене), кожному з нас буде призначено окреме завдання / помилка / проект, і ми будемо кожним відгалужувати поточний стовбур (підрив), а потім виконувати роботи з розробки в нашій галузі, перевірити результати, написати документацію за необхідності виконайте цикл експертного огляду та зворотного зв’язку з іншими розробниками, а потім надішліть гілку на огляд + об'єднайте наше програмне забезпечення для управління проектами.

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

Для нас не рідкість 10-20 активних гілок, які сидять в останній черзі на огляд, щоб їх об'єднати в стовбур.

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

У мене є декілька прямих питань:

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

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

Будь-яке інше розуміння цієї ситуації було б вдячне.


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

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

3
Що відбувається, коли начальник їде у відпустку?
Ліат

Як би ви визначили стратегію розгалуження / злиття ядра Linux?
Брайам

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

Відповіді:


60

Деякі пропозиції:

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

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

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

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

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

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


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

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

@ nick012000: Хіба ця пропозиція не ускладнить воротаря прийняти або відхилити окремі гілки функцій для / проти інтеграції в багажник? Я маю на увазі, якщо декілька особливостей змішати в одну галузь розвитку, реінтеграція цих змін частково в магістраль стане справді важкою. Або я щось пропускаю?
Док Браун

10
" Вирішувати конфлікти злиття паралельно у власній гілці і так брати певний тягар з воротаря ствола ". - Я відчуваю, що ця частина несправедливо зводиться до бічної ноти. "Краще для компанії, АЛЕ ТАКОЖ легше для вас ", здається, головна точка продажу, коли пропонуєте це начальнику. Це більше стосується офісної політики, про яку НЕ не йдеться, - але в цій ситуації, без оплати від шефа, все інше в цій технічно чудовій відповіді просто не відбудеться.
Р. Шмітц

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

18

Ми демонструємо той самий антидіапазон, який був описаний як "злиття великого удару"?

Звучить так.

Чи є деякі проблеми, які ми бачимо в результаті цього процесу злиття?

Безумовно

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

У моєї компанії кожен диявол має можливість зливатися. Ми призначаємо Запит на об'єднання іншому розробнику, проходимо цикл перегляду / відгуку / оновлення, поки обидві сторони не будуть задоволені. Потім рецензент об’єднує код.

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


1
Не відповідь, яку я шукав, тому що я сумніваюся, що мій начальник ослабить свої сховища на сховищі багажника. Але неймовірно корисна відповідь нічим, спасибі за розуміння!
користувач6567423

5
@ user6567423: Якщо ваш начальник стає вузьким місцем, яке він зараз відповідає вашому опису, йому доведеться або змінити свій підхід, або визнати, що він є причиною затримок (в чому його співробітники тоді не можуть звинувачувати). Відмовитись від зміни свого підходу, ігнорувати проблеми, які ви створюєте, і покласти на себе провину на інших - це не спосіб ведення бізнесу.
Флатер

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

1
@ user6567423 Мені цікаво, якщо він коли-небудь пояснював, чому він єдиний, хто може об'єднатись у багажник.
Матвій

13

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

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


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

8

Я погоджуюся з обом Док Браун, але я бачу ще одного антипатрійна:

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

У моїй скромниці є декілька управлінських моделей:

  1. Він / вона є єдиною дросельною точкою, що обмежує швидкість команди. Ваш коефіцієнт шини - 1. Теорія обмежень говорить про те, що ви повинні докласти зусиль для вдосконалення найповільнішої частини ланцюга.
  2. Ваш менеджер робить зворотний цикл зворотнього зв'язку і зменшує спритність вашої команди. Ви можете звільнити щотижня?
  3. Складність злиття зростає експоненціально з кількістю коду. Краще зробити 10 злиття зі 100 рядками, ніж 1 з 1000 рядків. Це лише одна з причин, чому ви повинні робити це якомога швидше
  4. Якщо ви виявите збій у багажнику, ви зробите це останнє вчасно. Яка з кількох галузей була проблематичною
  5. Рішення повинні приймати ті, хто більше знає про них. Хто знає більше в цьому випадку? Б'юсь об заклад, що розробники, які зробили код.
  6. Ви не можете виправити помилку у виробництві, якщо ваш менеджер є у свята.
  7. Ви переробляєте роботу і кидаєте назад гілки. Це марна трата часу. Час, який він чекає, щоб досягти виробництва, також витрачається.

Рекомендації:

  • Ваш менеджер повинен делегувати відповідальність команді. Потрібно показати, що колектив зрілий, професійний. Дайте зрозуміти, що вони можуть довіряти команді
  • Запровадити деякий метод огляду. Можливо, вам знадобиться схвалення двох інших членів команди.
  • Можливо, використання SVN робить його складніше. Спробуйте Git спробувати і побачити, чи допоможе вам. Навіть більше. Якщо ви використовуєте GitHub, ви можете використовувати механізм "Затягнути запит", щоб злиття вимагало певних голосів.
  • Читайте та діліться інформацією про гнучку практику, безперервну інтеграцію та DevOps.

7
Я працював професійно і з SVN, і з git, і я б сказав, що SVN, безумовно, є частиною проблеми: Це змушує політику єдиного злиття-назад-фіксації у галузях, яких немає в git. У git всі злиття рівні, у SVN деякі більш рівні, ніж інші. Крім того, відсутність місцевих комісій набагато складніше експериментувати з SVN, ніж з git, а відсутність зони постановки лише додає негнучкість SVN. Є причина, чому Торвальдс не просто використовував SVN, а не розвивав git ...
cmaster

На мою думку, Git набагато краще, ніж svn з причин @cmaster, викладених і багато іншого
reggaeguitar

Я погоджуюсь, що git, ймовірно, вирішить деякі наші проблеми з об'єднанням, і шановний бог, я хотів би, щоб у нас була доступна база даних. Але я не думаю, що ми перейдемо до перемикання незабаром :(
user6567423

1
@ user6567423, я провів консультацію минулого року, де я допоміг невеликій команді перейти зі svn на Git та змінити їхній робочий процес, включаючи навчання їх на Git та налаштування їх з виданням спільноти GitLab (яке є відкритим кодом) для огляду коду та співпраці . Вони були дуже захоплені цим; це була різниця в ніч і день. (Також пройшло всього три дні.)
Wildcard

2

Коли ви виконуєте функціональну роботу в окремих гілках, ви не можете легко провести тестування інтеграції, поки одну з гілок не об'єднають у стовбур та не витягнуть в іншу гілку функції. На мій досвід, це головна проблема з антидіаграмою Big Bang Merge. В ідеалі ви б виконали функціональну роботу, протестували її у гілці функцій, об'єднали її в стовбур, і в цей момент у вас закінчиться функція. Якщо його не було об'єднано, вам доведеться переглядати його кожного разу, коли щось інше об'єднується в магістраль перед ним. Біль цього анти-шаблону полягає в тому, що у вас є багато помилок типу інтеграції, що з’являються наприкінці циклу розвитку.


1

Отже, у вас 20 відділень. Відділення 1 просто злито. Тоді розробник гілки 2 повинен об'єднати гілку 1 у свою гілку, щоб мати можливість об'єднатись у головну без конфлікту, а потім злитися. Тоді розробник гілки 3 повинен об'єднати гілку 1 і гілку 2 у свою гілку, щоб мати змогу об'єднатися в основну без конфлікту, а потім злитися.

Вправа для читача: Напишіть програму, яка друкує мою повну публікацію :-)

Це безумство. Ви витратите неймовірну кількість часу на злиття.


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

2
Нормальна поведінка злиття SVN, наскільки я можу сказати ...
cmaster

0

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

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


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

Йшлося про дві речі: начальник хоче залишитися єдиним воротом ворота, і речі не повинні сильно розходитися. Так, настане момент, коли щось підштовхнуло, що ще слід вивчити босом. Він повинен бути в змозі зробити це швидко, хоча, і в тому малоймовірному випадку, що йому потрібно негайно здійснити, він може скасувати останні зобов'язання. Це дозволить синхронізувати речі, і якщо ви нічого не зможете, то, безумовно, швидко провалитесь. Це виглядає як хороший компроміс для ситуації, що склалася.
Мартін Мейт

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