Перетягування змін від майстра до моєї робочої галузі?


16

Ми двоє працюємо над чимось. Ми використовуємо цю структуру філій

  • майстер
  • dev-A
  • dev-B

Ми обидва працюємо над окремими галузями (dev-A, B) і щоразу, коли закінчимо, - просуваємо наші зміни до головного.

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

Чи є спосіб вирішити це чи слід змінити структуру філії (за ознакою?)?

Відповіді:


16

Я бачив гілки розробників, які використовуються в двох основних сценаріях:

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

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

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

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

Я зараз є частиною групи з близько 35 учасників, розділених на 4 окремі команди, більшість людей приїжджають принаймні 2-3 рази на день, деякі люди 10-15 разів; незвично бачити, як будівлі розбиті, і вкрай рідко вони залишаються зламаними більше декількох хвилин. Ручки Git зливаються настільки легко, що віддалені гілки розробників просто непотрібні. Просто потягніть, з’єднайте локально і запустіть тести на фіксацію, перш ніж натиснути, це просто.

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

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

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


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

15

У вашому робочому відділенні, якщо ви переходите:

git commit -am "Committing changes before merge"
git merge master

Ви також можете об'єднатись з іншою галуззю розробників

git checkout dev-A
git merge dev-B

Що це зробить - це злити зміни майстра до вашої галузі розвитку.


Так - це один із способів. Я сподівався, що Git матиме для цього елегантний робочий процес.
Utkarsh Sinha

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

Perfecto. Є кілька дуже довгих відповідей на це точне запитання в кількох місцях, але git merge masterперебуваючи на перевіреній гілці функцій, це те, що я шукав. Спасибі
Дренай

3

Якщо dev-A і dev-B - це різні галузі для різних проектів, то те, що відповів @scaryrawr, було б найкращим.

Але якщо dev-A і dev-B насправді точно той самий код (той самий проект), то альтернативою буде те, що обидва працюють на одній з гілок. Наприклад, ви створюєте майстер відгалуження під назвою "devWork". Ви обидва замовляєте devWork, працюєте над ним, здійснюєте та здійснюєте зміни. Натиснуті зміни не відбудуться не в Master, а в devWork, тоді іншим користувачам гілки просто потрібно зробити PULL локально, щоб отримати натиснуті зміни.

Потім ви можете дотримуватися стандартних методів, щоб повернути роботу до devWork назад до Master тощо.

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