Чому всі користуються Git централізовано?


289

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

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

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

Мої запитання:

  1. Чому люди не використовують розподілений робочий процес для Git на практиці?
  2. Чи здатність до розповсюдженої роботи навіть важлива для сучасного контролю версій, чи це просто добре звучить?

Редагувати

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


31
Я відчуваю себе точно так само і не розумію цього.
Снуп

57
Особисто я просто не знаю жодних випадків використання для декількох дистанційних, крім вил для створення PR на головний пульт. Розподілена річ все ще корисна, оскільки це означає, що я отримую повну історію на своїй машині, не маючи розмови з мережею, і я можу виконати якусь роботу в режимі офлайн, якщо дуже хочу, і набагато простіше перейти з одного хоста онлайн-репо на інший. Що саме ви маєте на увазі, коли ви посилаєтесь на "розподілений робочий процес"?
Іхрек,

43
Я досить впевнений, що Торвальдс спочатку мав намір мати одне сховище ядра Linux "Джерело правди".
Стівен Бернап

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

37
Для мене "децентралізована натішність" git - одна з найменш важливих особливостей, яка рекомендує його. Можливість робити часті комутації та відмовляння локально, не впливаючи ні на кого іншого, чи потужні методи, такі як перезавантаження, - це те, коли git справді світить у моєму робочому процесі. Можливо (справді ймовірно), що все це стає можливим завдяки децентралізації, але "D" в DVCS для мене не так важливо.
Джей

Відповіді:


257

Ааа, але насправді ви які з допомогою мерзотника децентралізовано!

Порівняймо попередника git у mindshare, svn. Субверсія мала лише одне "репо", одне джерело істини. Коли ви взяли на себе зобов’язання, це було до єдиного центрального репо, до якого береться і кожен інший розробник.

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

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

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

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


15
Злиття SVN також впливає лише на розробників, які беруть участь у конфліктних змінах. Одна фіксація перетворюється на репо, жодне конфліктне злиття не може перейти в репо, поки конфлікти не будуть вирішені (ви також можете взяти паралельно окрему гілку / шлях, але це насправді це не конфлікт зараз?)
Бен Войгт

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

17
@BenVoigt О, це робота припиняє все в порядку. Пам’ятайте, що вам потрібно svn upбути в курсі репо, перш ніж ви зможете зареєструватися. Коли інші продовжують реєстрацію, коли ви намагаєтеся вирішити конфлікти злиття, і надати вам інший набір конфліктів злиття ... ви або зупинитесь на цьому або ви втрачаєте те, що залишилося від вашого розуму.
Майкл Хемптон

21
Ні, люди напевно можуть продовжувати брати участь у відділенні, з якого ви об’єднуєте зміни, не перериваючи робочий процес.
Ben Voigt

29
Право Бена. Репортаж SVN, який керується належним чином , і використовується командою, яка отримала належну освіту щодо розробки програмного забезпечення, не повинна ефективно мати конфліктів на об'єднанні. Ви отримаєте їх лише тоді, коли хтось зробив щось не так і його потрібно звільнити (: P). inb4 простіше, коли не потрібно навчати людей користуватися їх інструментами. Так, добре, про Git можна навчити набагато більше, ніж про SVN!
Гонки легкості по орбіті

118

Коли збірка сервер (ви які використовуєте CI, правильно?) Створює збірку, де це витягнути з? Звичайно, для інтеграційної побудови, яку ви можете стверджувати, не потрібна "одна справжня репо", але, безумовно, розробка дистрибутива (тобто те, що ви надаєте замовнику).

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

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

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


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

5
@gardenhead: ви пропустили суть: той самий аргумент справедливий, якщо інтеграція будується вручну. "CI" - це лише автоматизація процесу, який набагато старший за Git.
Док Браун

25
"кожен може бачити мій попередній код" - і він також може витягнути ваш попередній код, злити його зі своїм попереднім кодом та запустити тести. Це біль у централізованих VCSes, оскільки для цього потрібні гілки та зміни в єдиній копії. Розподілившись, ви просто налаштовуєте додаткові пульти, після чого починаєте об’єднання, виправлення та збирання вишні. Ви відстежуєте те, що зробили, але нікому більше ніколи не доводиться бачити, які шнанігани ви збираєтеся, якщо ви не вирішите їх опублікувати. Загалом, я рекомендую, щоб ніхто не оголошував DVCS безглуздим, поки вони фактично не використали SVN для великого проекту ...
Стів Джессоп

9
Тому що немає жодної "справжньої збірки" ядра Linux. Оскільки кожен будує це сам, репо Лінуса не є більш канонічним, ніж чиїсь інші. Якщо ви продаєте товар, який працює не так добре.
Майлз Буднек

2
@Superbest: багато (якщо не все) дизайну git базувалося навколо Bitkeeper. Git був створений після того, як розгорнулася суперечка Linux-bititter.
whatsisname

40

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

Але 90% + часу, звичайно, ми переходимо через центральний репо. Коли мені не байдужа якась зміна чи робота конкретного колеги, це зручніше, і це масштабується краще, щоб витягнути "всі зміни моїх колег, перевірені в центральному репо", а не окремо тягнути зміни від кожного з N колеги. DVCS не намагається запобігти тому, щоб "тягнути з основного репо" найпоширенішим робочим процесом, намагається запобігти тому, щоб він був єдиним доступним робочим процесом.

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

Якщо «дійсно децентралізовані» означає «ні спеціальних репо» , то я не думаю , що це те , що Лінус значить чемпіон, враховуючи , що в дійсності він робить підтримувати спеціальні операції РЕПО , які є більш важливими у великій схемі речей, ніж якийсь випадковий клон Linux, який я зробив вчора і планую використовувати лише для розробки невеликого патча, а потім видалити його, як тільки він прийняв патч. gitне привілейований його репо над моїм, але Лінус робить привілей. Його "поточний стан Linux", моє - ні. Тому природно зміни мають тенденціюпройти через Лінус. Сила DVCS над централізованою системою VCS полягає не в тому, що не повинно бути фактичного центру, це те, що зміни не повинні проходити через будь-який центр, оскільки (конфлікти, що дозволяють), кожен може злити що завгодно.

Системи DVCS також змушені , оскільки вони децентралізовані, надавати певні зручні функції, засновані на тому, що ви обов'язково повинні мати повну історію (тобто репо) на місцях, щоб зробити що-небудь. Але якщо ви задумаєтесь про це, немає жодної принципової причини, чому ви не змогли б налаштувати централізований VCS з локальним кешем, який зберігає всю історію для операцій лише для читання, дозволених застарітими (я думаю, Perforce має можливість для цього режиму, але я ніколи не використовував Perforce). Або в принципі ви могли налаштувати gitсвій.git/каталог у віддаленій монтованій файловій системі, щоб імітувати "особливість" SVN, що вона не працює, якщо у вас немає мережевого з'єднання. Насправді, DVCS змушує сантехніку бути більш надійною, ніж можна дістатись у централізованому ДКС. Це (дуже вітається) побічний ефект і допомогло мотивувати дизайн DVCS, але такий розподіл відповідальності на технічному рівні не такий, як повністю децентралізація всієї відповідальності людини .


7
Вони технічно еквівалентні, а не соціально еквівалентні.
цікаводанні

3
Надсилання патчів є досить безболісною, на всякий випадок, якщо хтось задумається про це, просто використовуйте git format-patch, а потім git send-email . Це робило це, коли я не хотів поспішати з контролем доступу Github, і це було дуже просто, у кожного з них є електронна пошта.
Рудольф Олах

1
"обов'язково має мати повну історію [...] локально, щоб зробити що-небудь" - неправда; сучасні DSCM підтримують часткові репозиції ("неглибокі каси" в bzr термінах, "дрібні клони" в git термінах).
Чарльз Даффі

27

Цікавою є природа DVCS, якщо інші люди користуються нею розповсюджено, ви, ймовірно, не знаєте цього, якщо вони безпосередньо не взаємодіють з вами. Єдине, що ви можете остаточно сказати, це те, що ви та ваші безпосередні товариші по команді не використовуєте git таким чином. Для цього не потрібна політика для всієї компанії. Тому я прошу вас, чому не ви використовувати мерзотника децентралізовано?

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

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

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


1
Питання про те, як важко створити гілку в традиційному CVCS, повністю зводиться до політики: мені трапляється працювати з висхідним репо-версією SVN (природно, через клон git-svn!), І я маю повне право створювати будь-які гілки I хочу, хоча це досить великий проект. Мені просто не дозволено торкатися низки визначених галузей інтеграції, не кажучи вже про магістраль, не розмовляючи спочатку з начальством. В інших компаніях може бути інша політика, яка може бути більш обмежувальною, але їх, звичайно, не повинно бути.
cmaster

7
Ти маєш рацію, я не знаю, наскільки мені це легко. Я б хотів, щоб я був у часи домінування SVN, щоб оцінити, як далеко ми зайшли. Як дуже молодий розробник програмного забезпечення я вважаю, що ця сама модель повторюється досить часто: досвідченіші розробники говорять мені, що старий спосіб робити щось було погано, а цей новий спосіб / технологія набагато простіше. Але я просто повинен прийняти їх слово; Я ніколи не можу по-справжньому оцінити переваги. Мені завжди було важко подолати цей дисонанс.
садовий будинок

1
@gardenhead ви завжди можете створити своє власне репортаж SVN і спробувати його зламати;) (і помітити, наскільки складніше це, ніж створити git repo і клонувати його ...) - Ще одна основна особливість, яку я помітив (принаймні в Особливо корпоративних середовищ) полягає в тому, що обмін файлами або є дещо незручним, або це робиться таким чином, що створює захоплення сховищами (наприклад, сканер вірусів блокується на мережевому диску).
Вейн Вернер

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

1
@gardenhead, мабуть, проекти випускаються з досить божевільною швидкістю. Здатність продовжувати навчання необхідна, якщо ви хочете знайти дивовижну роботу.
Вейн Вернер

19

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

Проект військового моделювання, над яким працювала моя команда кілька років тому. Весь код (ми говоримо про кодову базу з 1 млрд доларів США) повинен був (згідно із законом / міжнародною угодою, чоловіки в темних костюмах приходять, якщо цього не робити), бути на машинах, фізично ізольованих від будь-якого інтернет-з'єднання . Це означало звичайну ситуацію, коли у нас було 2 ПК, один для запису / запуску / тестування коду, інший для речей Google, перевірка електронної пошти тощо. І в команді цих машин була локальна мережа, очевидно, жодним чином не підключена до Інтернету.

"Центральним джерелом істини" була машина на армійській базі, у підземному приміщенні без вікон (підсилений будинок, яда-яда). Ця машина також не мала підключення до Інтернету.

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


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

Крім того, якщо ви розглядаєте щось у масштабі ядра Linux ... Розробники не просто надсилають запит на тягнення до самого Linus. По суті це ієрархія репо - кожне з яких було / є «центральним» для когось / якоїсь команди.

Відключений характер git означає, що його можна використовувати в середовищах, коли підключені інструменти управління джерелами ( наприклад, SVN, для одного) не можна було використовувати - або їх не можна було використовувати так легко.


3
Я член клубу Mile High (Software) - я вчинив код у 35000 футів. Звичайно, у літаків є Wi-Fi зараз , але це було не завжди так. І приємно знати, що принаймні у випадку аварії є можливість, що моя команда отримає мій код недоторканим.
Вейн Вернер

@WayneWerner це правда. Я думав над тим, щоб надати ще кілька загальних ситуацій, коли неможливо бути (майже) завжди зв’язаним. Напр. На літаку, на човні в море, космічній станції, віддалених місцях Африки тощо
Tersosauros

18

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


14

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

Це не дуже поширений випадок використання при будівництві конкретного продукту з конкретним офіційним випуском, але у світі F / OSS це норма, не виняток.


4
Це правильна відповідь, також з історичної точки зору. Ядро Linux вже давно має декілька джерел сховищ (розробники називають «деревами», такими як «дерево Лінуса» або «дерево Андрія»). Linux хотів щось підтримати такий тип розподіленої розробки, коли він розробляв git.
sleske

@Luaan Подумавши про це деякий час, я зрозумів, що ти маєш рацію. Я трохи змінив формулювання - чи це захоплює розрізнення трохи краще?
пухнастий

@fluffy Звучить мені добре;)
Луань

9

Чому всі користуються git централізовано?

Ми ніколи не зустрічалися, як це ви кажете всім? ;)

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

Звичайно, багато людей можуть використовувати його централізовано, як CVS або SVN. Але не забувайте про іншу функцію, яка по суті поставляється з розподіленим VCS: всі копії більш-менш "повні" (усі гілки та повна історія доступна), і всі гілки можна перевірити, не підключаючись до сервера.

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

Хоча ви не в змозі зробити це за допомогою CVS і SVN, Git можна без проблем використовувати централізовано, як і попередні.

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

Інші функції, які виходять з коробки з Git:

  • криптографічно підписує вчинення
  • Rebasing (переупорядкування та скасування комісій; редагування комітетів, не лише повідомлення)
  • збирання вишні
  • розбиваючи історію
  • місцеві відділення та зберігання змін (у Вікіпедії називається "стелаж")

Також дивіться ці три таблиці у Вікіпедії - Порівняння програмного забезпечення для управління версіями :

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

  1. Чому люди не використовують розподілений робочий процес для Git на практиці?

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

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

  1. Чи здатність роботи в розподіленому вигляді навіть важлива для сучасного контролю версій, ...

Як завжди: це залежить від вимог.

Використовуйте децентралізований VCS, якщо застосовується будь-яка точка:

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

Є ще кілька, але чотирьох має бути достатньо.

... чи це просто звучить приємно?

Звичайно, це звучить приємно - для початківців.


Не отримав SVN svn initв якийсь момент?
іммібіс

5

Гнучкість - це прокляття, а також благо. І як Git є надзвичайно гнучким, це майже завжди далеко надто гнучким для типової ситуації. Зокрема, більшість проектів Git - це не Linux.

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

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


1
Я згоден, що гнучкість Git потрібно зменшити для більшості випадків використання. На моїй останній роботі у нас не було вказівок щодо використання git, і через це були постійні конфлікти та поломки. У моїй новій компанії ми використовуємо модель Git Flow, і це робить розвиток набагато більш спрощеним і без стресу.
садок

1
Це не "теоретична гнучкість", щоб дозволити не деревам. Обмежте себе лише "деревами", і ви ніколи не зможете злитися зі своїми змінами, тим самим зробивши весь СВК дещо безглуздим.
Wildcard

2
@Wildcard: Злиття дерев взагалі не проблема, чому це так? Звичайно, ви не можете об'єднатись між випадковими вузлами просто між батьком / дитиною.
MSalters

1
Я був недостатньо зрозумілий, очевидно. Я мав на увазі дерево комітетів, а не дерево файлових систем. За визначенням, об'єкт злиття має більше одного з батьків, і тому ваш графік історії більше не є деревом, а натомість є DAG.
Wildcard

2
@Wildcard: MSalters сказав, що сховища зазвичай підключені як дерева, а не що є комітами . Він каже, що у репостів зазвичай є лише одне віддалене "вище за течією", яке вони підштовхують (або видають запити на тягу). Я не маю жодної статистики щодо того, правда це чи ні, але це абсолютно окрема вимога від будь-якого відношення до того, скільки батьків має зобов’язання про злиття.
Стів Джессоп

4

Бізнес-логіка винагороджує централізований сервер. Для майже всіх реалістичних бізнес-сценаріїв централізований сервер є основною особливістю робочого процесу.

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

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


3

Для того, щоб колега витягнути з git repo на моїй машині, це означає, що мені потрібно мати демон git, що працює на рівні кореня, як фонове завдання. Мені дуже цікаво демон, що працює на власному комп’ютері або на ноутбуці, який надає компанія. Найпростіше рішення - "НІ"! Щоб колега витягнути з git repo на моїй машині, це також означає, що моя адреса в Інтернеті повинна бути виправлена. Я подорожую, працюю вдома, а інколи працюю в офісі.

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

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


"Мені дуже цікаво демон, що працює на моєму власному комп'ютері або на ноутбуці, який надає моя компанія". - адже окрім нічого іншого, запуск послуги на моєму ноутбуці означає, що ця послуга недоступна, коли я закриваю кришку! DynDNS може допомогти в декількох місцях (до певної міри, ви все ще можете потрапити в пастку за NAT), але це не допомагає вимкнути мережеву карту ...
Стів Джессоп,

Існує маса способів зробити git repo видимим без спеціального демона; Доступ до нього можна отримати майже через будь-який спільний доступ до файлів (smb, sshfs тощо), і навіть він може бути доступний як звичайний HTTP-магазин.
пухнастий

2

Складність:

Для центрального сховища може бути типовий робочий потік

branch off from the central master branch
change the code
test
possibly go back to changing the code
commit
merge any new changes from the central master branch
test
possibly go back to changing the code
merge changes into the central master branch and push

Складність щодо кількості розробників в O (1).

Якщо натомість у кожного розробника є своя власна гілка, для розробника 0:

branch off from master branch 0
merge from master branch 1
...
merge from master branch N-1
change the code
test
possibly go back to changing the code
commit
merge any changes from master branch 0
merge any changes from master branch 1
...
merge any changes from master branch N-1
test
possibly go back to changing the code
merge changes into master branch 0

Підхід однорангових - O (N).

Консистенція:

Тепер подумайте, чи існує конфлікт між об'єднанням між головним відділенням Аліси та головним відділенням Боба. Кожен з N розробників міг вирішити конфлікт по-різному. Результат: хаос. Існують способи досягнення можливої ​​узгодженості, але поки це не відбудеться, всілякий час розробника можна витратити даремно.


Якщо ви збираєтесь голосувати проти, ви можете залишити коментар, чому?
Теодор Норвелл

Не те, що я проти розумних змагань. Я просто хочу знати, чи відповідь якимось чином неправильна.
Теодор Норвелл

1

Простий:

Компанії - це централізовані організації, що мають централізований робочий процес.

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

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

Щоб відповісти на ваше запитання: Розподілена частина справді перевершує розподілене середовище, наприклад, з відкритим кодом. Результати залежать від того, хто говорить. Лінус Торвальдс - це не зовсім твій щур в кабіні, тому для нього важливі різні особливості GIT, ніж для твоєї компанії, орієнтованої на github.


-2

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

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

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

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

Бути централізованим - це здорово, доки не виникне проблема… ..

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

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

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

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