Які плюси і мінуси git-flow vs github-flow? [зачинено]


125

Нещодавно ми почали використовувати GitLab.

В даний час використовується "централізований" робочий процес.

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

Які плюси і мінуси git-flow vs github-flow ?

Відповіді:


133

Як обговорювалося в епізоді 17 GitMinutes, Ніколас Закас у своїй статті " Робочі процеси GitHub всередині компанії ":

Git-flow - це процес управління змінами в Git, який створив Вінсент Дріссен та супроводжувався деякими розширеннями Git для управління цим потоком.
Основна ідея мерзотника-потоку , щоб мати декілька окремих гілок , які завжди існують, кожен для іншої мети: master, develop, feature, release, і hotfix.
Процес розвитку функцій або помилок перетікає з однієї гілки в іншу, перш ніж її остаточно випустити.

Деякі респонденти вказали, що вони використовують git-flowзагалом.
Деякі почали з цього git-flowі віддалилися від нього.

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

Коротко:

Почніть з максимально простої моделі (як правило, потік GitHub), і рухайтеся до більш складної моделі, якщо вам потрібно.


Ви можете побачити цікаву ілюстрацію простого робочого процесу, заснованого на GitHub-Flow за адресою:
" Проста модель розгалуження git ", основними елементами якої є:

  1. master завжди має бути розгорнутим.
  2. всі зміни, внесені через гілки функцій (pull-request + spage)
  3. базування даних, щоб уникнути / вирішити конфлікти; злитися вmaster

https://a248.e.akamai.net/camo.github.com/9783623eba280ba5ace8b9e63842be52af2f0546/687474703a2f2f7374617469632e62656e65742e61692f736b697463682f6632692336396396396386396396396387397386387387387387387657657337337bdddddddddddddddddddddddddddddddddddddddddddddddddd, як урок


Дійсний більш повний та надійний робочий процес див. У потоці gitworkflow (одне слово) .


88

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

Кілька версій у виробництві - використовують Git-flow

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

Єдина версія у виробництві простого програмного забезпечення - використовуйте Github-flow

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

Єдина версія у виробництві, але дуже складне програмне забезпечення - використовуйте Gitlab-flow

Велике програмне забезпечення, наприклад Facebook та Gmail, можливо, вам знадобиться ввести гілки розгортання між вашою філією та головною гілкою, де можуть працювати інструменти CI / CD>, перш ніж вона надійде до виробництва. Ідея полягає у впровадженні більшого захисту у виробничій версії, оскільки її використовують мільйони людей.


7
Просто додайте "Gitdmz-flow" / "Git DMZ Flow" до списку: gist.github.com/djspiewak/9f2f91085607a4859a66
Роберт Фей

1
Компанії, на які посилаються, використовують систему на основі магістралей. paulhammant.com/2014/01/08 / ...
PatrickWalker

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

2
З мого розуміння, Git-Flow не дуже добре працює з багатовиробничою версією. Стратегія виправлень передбачає, що у вас є лише одна виробнича версія, і ви робите виправлення у відповідній гілці випуску (а пізніше об'єднуєте її назад, щоб розвинути гілку). Здається, не задовольняйте, як ви можете виправити одну помилку, що існує у кількох галузях виробництва.
Адріан Шум

5
@GayanPathirage Насправді це не так. 1. "класичні" теги GitFlow у майстра. Гілка виправлення призначена лише для того, щоб виправити останню виробничу версію (від головного). 2. "гілка випуску" означає щось інше в Gitflow, що насправді є гілкою попереднього перегляду перед випуском (розгалуження від розгалуження, що розвивається, і спрямоване на злиття для управління, коли воно справді випущене). 3. Те, що ви маєте на увазі, - це щось, що називається "гілка підтримки" в GitFlow (Це одна з причин, що мені не подобається GitFlow: нетрадиційна термінологія). Однак це все ще експериментальний потік (тому його ви не бачите в більшості Gitflow Intros)
Адріан Шум

38

Я використовую модель git-flow вже більше року, і це нормально.

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

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

Але, наприклад, як у GitHub у нас є додаток, який має швидкий потік розвитку / розгортання, ми розгортаємо щодня, а іноді і кілька разів на день, в цьому випадку git-flow має тенденцію сповільнювати все, на мою думку, і я використовую GitHub потік.

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

Існує щонайменше один графічний інтерфейс, який підтримує git-flow для Mac та Windows SourceTree .

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

Сподіваюся, це допомагає


+1. Я погоджуюсь з тобою.
VonC

2
Потік GitHub знаходиться в межах Git-Flow. Подумайте, якщо вам потрібна безперервна інтеграція та постійне розгортання, ви можете просто запустити якомога більше з розвитком гілки. Кожна особливість відгалужується від галузі, що розвивається. Можливо, вам не знадобиться головна гілка або випуск гілок, якщо у вас складні моделі розгортання. (напр., ваша версія 1.1 працює на якомусь клієнті, ваша версія 1.2 працює на іншому клієнті, а зараз ви розробляєте 1.3 для свого нового клієнта) Усі 3 клієнта запитають виправлення помилок та зміни у відповідній версії.
Гаянська пафірагія

Привіт Дієго і дякую за вашу відповідь. А як щодо обслуговування кількох версій? Ви легко це робите з Git Flow? Я чув, що це важко, оскільки вам потрібні гілки підтримки! Чи вірите ви, що модель цілком підходить для цього?
Луїс

1
Привіт Луїс, я думаю, що ти можеш змусити модель працювати, але я знову відчуваю, що ти можеш досягти цього за допомогою стандартного робочого процесу git.
Дієго Антунес

1
@LuisGouveia насправді, оскільки на ваше запитання та мою відповідь вище, я натрапив на проект, який git-flow буде працювати ідеально, і я маю право власності на проект. Ідея полягає у використанні git flow release...комбінації з діями github для розгортання програми. У своїй оригінальній відповіді я згадував, що ми випускали кілька разів на день, це спричиняло проблеми при використанні git-flow. Я вважаю, що git-flow буде добре працювати в цьому проекті, тому що ми маємо заздалегідь визначений цикл випуску, який є однією з головних точок продажу для використання git-flow.
Дієго Антунес
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.