Ми підривники, і ми хочемо знати переваги Mercurial [закрито]


22

Прочитавши, що я підривник Subversion, чому я повинен вважати чи не вважати Mercurial або Git чи будь-який інший DVCS .

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

Наша команда складається з 8-10 розробників, які працюють над однією великою базою кодів, що складається з 60 проектів. Ми використовуємо Subversion і маємо основний магістраль. Коли розробник запускає новий випадок Fogbugz, він створює svn гілку, виконує роботу над гілкою і коли вони закінчуються, вони зливаються назад до магістралі. Іноді вони можуть залишатися на гілці тривалий час і зливати стовбур із гілкою, щоб отримати зміни.

Коли я спостерігав, як Лінус говорив про те, що люди створюють філію і ніколи більше не роблять цього, це зовсім не ми. Ми створюємо, мабуть, 50-100 відділень на тиждень без випусків. Найбільший виклик - це злиття, але ми також дуже добре в цьому. Я, як правило, зливається у випадку fogbugz & checkin, а не по всьому корінню гілки.

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

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

Чи є якась користь від DVCS, яку ми не бачимо, що може нам дуже допомогти?


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

Я фанат Mercurial, і він, очевидно, пропонує набір функцій SVN, але, як кажуть, ці додаткові функції корисні лише для невеликої кількості проектів. Вам, напевно, це не потрібно, це не змінить ваше життя, але ви отримаєте більше можливостей і нічого не втратите, чому б ні?
джиггі

Ви перевірили Hg Init ? Це підручник з Меркуріалу, написаний Джоелем Спольським. Він починається з розділу для користувачів Subversion, але в іншому випадку очікує, що ви нічого не знаєте про DVCS.
Баррі Браун

Відповіді:


11

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

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

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

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

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


2
+1! Крім того, якщо ви дасте mercurial справедливу і ретельну спробу, я впевнений, що ви не захочете повертатися назад.
Піт

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

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

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

Гарна точка @Mark. У такій невеликій команді багато нормальних зборів для більших команд виходять у вікно. Я все ще думаю, що це варто з міркувань швидкості.
Карл Білефельдт

1

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

Якщо у вас є розробники, які просто не можуть функціонувати без DVCS, вкажіть їх на svn шлюзи для hg або git. Дайте їм зрозуміти, що їх реєстрація в сховище svn повинна відповідати будь-яким процедурам та процесам, які використовує решта команди. Ще одна перевага цього підходу полягає в тому, що справжні джелоти DVCS, які вже використовують шлюзи, не повідомляючи, що тепер ви можете вийти з шафи :-).


Чи хочемо ми взяти час на зміни? Ні, особливо не тоді, коли ми лише перейшли на svn в останні 2 роки. Дякуємо за ваші коментарі.
Метт

1

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

З вашої точки зору, DVCS матиме такі значні переваги перед SVN:

  • Після того, як ви клонували репортаж, багато операцій можна виконувати локально.
    • Переглядаючи журнал репозиторію, не потрібно торкатися до svn-сервера, тому це може бути неймовірно швидким.
    • Аналогічно, комутація гілок не вимагає доступу до сервера, а також локальних клонів.
  • Оскільки гілки є лише різними шляхами історії, ваше сховище не захаращене будь-якою гілкою, яку кожен створив (у нас тільки справді є гілки випусків у SVN, але в branchesкаталозі все ще є багато підкаталогів, які вже не є актуальними).
    • У Git, як тільки гілку буде об’єднано назад і повернення буде видалено, ви, можливо, ніколи не дізнаєтесь, що вона навіть існувала.
    • У Mercurial у вас є вибір або назвати гілку (у такому випадку вона кодується у кожний набір змін на вічність), або просто створити неназвану (топологічну) гілку, яка спокійно злиється з історією, коли вона mergeповернеться в default( trunk)
  • У SVN гілки гілок є занадто неясними, щоб бути корисними. В gitі hgвони просто збігаються з курсу.
  • DVCS розуміють, що розробка програмного забезпечення - це DAG , тобто коли ви зливаєтесь, ви отримуєте набір змін із декількома батьками. SVN (принаймні версія, яку я використав) насправді цього не розуміє.

Останнє, ви кажете

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

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

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

  • текст із гілки, в яку ви зливаєтесь
  • текст із гілки, в яку ви зливаєтесь

тоді як злиття з DVCS зазвичай дають вам третій варіант, який є

  • текст спільного предка обох гілок, який ви зливаєте

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

Загалом, я б запропонував вам спробувати. З такими інструментами, як gitsvnі hgsubversion, ви навіть можете випробувати їх із вашими поточними репортами SVN .

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


1
SVN не виникає конфлікту у випадку, коли ви також згадуєте. Він з’являється лише тоді, коли ви обидва зміните однакові лінії. Об'єднання, як правило, більше викликає перейменування / переміщення файлів або додавання / видалення у svn, оскільки воно не справляється добре із змінами каталогів. SVN злиття дає вам більше варіантів, ніж ці 2, як правило, я використовую "використовувати їх, а потім моє", оскільки ти, як правило, хочеш зберегти обидва набори змін, а не видаляти їх обох!
gbjbaanb

@gbjbaanb - Це не те, що я знайшов, саме тому я кваліфікував свій досвід роботи з SVN at least the version I've used. Я розумію, що остання версію SVN дійсно зрозуміти про спільних предків, але у мене немає досвіду , що і я підозрюю , що є багато серверів поза там працює старіші версії SVN , які мають ті ж проблеми.
Марк Бут

Між іншим, мені подобається те, що за допомогою hg(і майже напевно git, але я цього не пробував) ви можете взяти файл з трьома класами, розділити його на три файли з класом кожен, а потім пізніше об'єднати зміни між гілкою з 'комбінований' файл та гілка з окремими файлами, такі, що зміни до окремих класів застосовуються до правильних файлів. Чиста магія. * 8 ')
Марк Бут

1
gbjbaanb правильний; SVN не матиме конфлікту в описаному вами сценарії. Це досить просто продемонструвати собі.
Джеремі

@Jeremy @gbjaanb - чи краще відредагований розділ працює для вас? Я не збираюся сперечатися з вами про те, як svnповинні працювати злиття, у мене є власний досвід роботи з ним svnкомандного рядка та SVNKit під Eclipse, де просто втягування оновлень може призвести до «конфліктів», які доводиться вирішувати вручну, вирізати і вставити (Я не можу легко сказати: "Я хочу обох цих змін у такому порядку".
Марк Бут

0

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

Але насправді я фактично не відійшов від Субверсії. Я просто використовую git як мій локальний клієнт svn.

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