Які відносні сильні та слабкі сторони Git, Mercurial та Bazaar? [зачинено]


137

Що люди тут бачать як відносні сильні та слабкі сторони Git, Mercurial і Bazaar?

Розглядаючи кожну з них та проти таких систем управління версіями, як SVN та Perforce, які питання слід враховувати?

Плануючи міграцію з SVN на одну з цих розподілених систем управління версіями, які фактори ви б врахували?


1
Для специфічного порівняння Windows між Mercurial та Git див. Це запитання: stackoverflow.com/questions/2550091/…
alexandrul

До речі, я хотів би бачити відсоток використання різних систем DVCS.
серхіол

Відповіді:


145

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

Bazaar досить швидкий (дуже швидкий для дерев з дрібною історією, але в даний час погано масштабується з тривалістю історії), і його легко вивчити тим, хто знайомий з інтерфейсами командного рядка традиційних SCM (CVS, SVN тощо). Команда розробників Win32 вважає першокласною ціллю. Він має підключається архітектуру для різних компонентів і часто замінює формат зберігання; це дозволяє їм впроваджувати нові функції (наприклад, кращу підтримку інтеграції із системами контролю версій на основі різних концепцій) та підвищувати продуктивність. Команда Bazaar розглядає функцію відстеження каталогів та перейменування підтримки функцій першого класу. У той час як глобально унікальні ідентифікатори ідентифікатора версії доступні для всіх версій, локальні версії дерев (стандартні номери версій, більше подібні до тих, які використовуються svn або іншими більш звичайними SCM) використовуються замість хешів вмісту для ідентифікації версій. Bazaar має підтримку "легких кас", в яких історія зберігається на віддаленому сервері, а не скопіюється в локальну систему і при необхідності автоматично передається через мережу; В даний час це унікально серед DSCM.

Для обох доступна певна форма інтеграції SVN; однак, bzr-svn є значно більш здатним, ніж git-svn, значною мірою завдяки внесенню для цієї мети редагування резервного формату.[Оновлення, станом на 2014 рік: Сторонній комерційний продукт SubGit забезпечує двосторонній інтерфейс між SVN та Git, який по достовірності порівняно з bzr-svn та значно більш відполірований; Я настійно рекомендую використовувати його в порівнянні з git-svn, коли бюджет та ліцензійні обмеження дозволяють].

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

Одна з проблем при переході з SVN полягає в тому, що інтерфейси графічного інтерфейсу та інтеграція IDE SVN є більш зрілими, ніж будь-які з розподілених SCM. Крім того, якщо ви зараз активно використовуєте автоматизовану автоматичну програму скриптів за допомогою SVN (тобто вимагає пройти тести одиниць, перш ніж фіксація може продовжуватися), ви, ймовірно, захочете використовувати інструмент, подібний до PQM, для автоматизації запитів на об'єднання до ваших спільних гілок.

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

[Про автора: я використовую Git і Perforce для роботи, а Bazaar для своїх особистих проектів і як вбудовану бібліотеку; інші частини організації мого роботодавця активно використовують Mercurial. У попередньому житті я будував велику кількість автоматизації навколо SVN; до цього я маю досвід роботи з GNU Arch, BitKeeper, CVS та іншими. Спочатку Git був дуже непридатним - Арк GNU відчував себе настільки важким для концепції, на відміну від наборів інструментів, створених відповідно до вибору робочих процесів користувача, - але я з тих пір став досить комфортним це].


Хея. Я просто хочу, щоб ви знали, що cscvs все ще використовується для запуску імпорту коду Launchpad, і мені була випущена версія Canonical, коли я працював там.
ddaa

19

Стів Стрітінг із проекту Ogre 3D щойно (28.09.2009) опублікував запис на цю тему в блозі, де він чудово і навіть порівнює порівняння Git, Mercurial та Bazaar .

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

alt текст

Це коротке прочитання, і я дуже рекомендую його.


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

2
@CharlesDuffy Mercurial також має інтуїтивні назви команд, а не мертвих (розробка Bazaar зупинилася 2 роки тому, і Canonical відкидає її, так Git + github виграє DVCS-гру ). Я ніколи не розумію схему іменування git, тому особисто віддаю перевагу HG. Важко битися з хлопцями-любителями Git ((
gavenkoa

@gavenkoa, основні назви команд bzr відповідають SVN, тому я знову не бачу, що може бути неінтуїтивним щодо них (для користувача SVN). Так, звичайно, розвиток мертвий. Я не стверджую, що bzr практичний для використання - лише те, що висловлена ​​конкретна критика була необґрунтованою.
Чарльз Даффі

1
@gavenkoa ... Я також, як відомо , захищати аспекти BitKeeper, незважаючи на досить великий зуб на розробників програмного забезпечення , в / власників ( в його основі публічно задокументовані ... хоча Ларрі зробив зателефонувати мені коли - то , щоб описати їх кінець того , що сталося, і я дозволю, що я зараз розумію обидві сторони). Тільки тому, що я захищаю СКМ, це не означає, що я фактично рекомендую людям використовувати його. :)
Чарльз Даффі

15

Що люди тут бачать як відносні сильні та слабкі сторони Git, Mercurial і Bazaar?

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

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

Одним з його недоліків є те, що підтримка MS Windows відстає і не є повною. Інший сприйнятий недолік полягає в тому, що він не так добре зафіксований, як, наприклад, Mercurial, і менш зручний для користувачів, ніж конкуренція, але він змінюється.

На мій погляд Меркуріал сила полягає в його хорошій продуктивності та малому розмірі сховища, в хорошій підтримці MS Windows.

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

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

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

Git написаний на C, скриптах оболонки та Perl, і є сценарієм; Mercurial написано на C (core, for performance) та Python, і надає API для розширень; Bazaar написаний на Python і надає API для розширень.


Розглядаючи кожну з них та проти таких систем управління версіями, як SVN та Perforce, які питання слід враховувати?

Системи управління версіями, такі як Subversion (SVN), Perforce або ClearCase, є централізованими системами управління версіями. Git, ртутний, базар (а також Darcs, монотонна і BitKeeper) є розподіленою системою управління версій. Розподілені системи управління версіями дозволяють набагато ширший спектр робочих процесів. Вони дозволяють використовувати "публікувати, коли буде готово". Вони мають кращу підтримку розгалуження та об'єднання, а також для важких галузей робочих процесів. Не потрібно довіряти людям, які мають доступ до них, щоб мати можливість отримувати внески від них у простий спосіб.


Плануючи міграцію з SVN на одну з цих розподілених систем управління версіями, які фактори ви б врахували?

Одним із факторів, який ви можете врахувати, є підтримка інтерактивної роботи з SVN; Git має git-svn, Bazaar має bzr-svn, а Mercurial розширення hgsubversion.

Відмова: Я - користувач Git та учасник невеликого часу та переглядаю (і беру участь у) списку розсилки git. Я знаю Mercurial і Bazaar лише з їх документації, різноманітних дискусій про IRC та списки розсилки, а також публікацій у блогах та статей, в яких порівнюються різні системи контролю версій (деякі з них перераховані на сторінці GitComppare в Git Wiki).


FYI - bzr-svn набагато здатніший ніж git-svn, оскільки він є двонаправленим: я можу запустити "bzr відділення svn: // ...", а пізніше об'єднати мої зміни назад до svn-сервера - там, де вони зберігатиметься з метаданими, які впізнають інші клієнти bzr.
Чарльз Даффі

2
Я hg dev, і я трохи розглядав дизайн Git. Я радий бачити, що вони обидва розглядають історію єдино розумним способом для розподілених налаштувань: на високому рівні вони є і ациклічним графіком комітетів, і на нижчому рівні вони обидва дозволяють виконувати посилання на маніфести, які посилаються на файли (краплі в Git ). У Mercurial є анонімні гілки (яких, AFAIK не існує в Git), він має закладені філії (дуже схожі на гілки Git, але немає push / pull), і він назвав гілки (назва гілки записана у фіксації - таких також немає в Гіті).
Мартін Гейслер


7

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

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


10
Mercurial насправді нарівні з Git. У виконанні не велика різниця. Але базар, Waaaay повільніше, ніж Mercurial і Git.
Джошуа Партогі,

@jpartogi - Показники продуктивності Bazaar поліпшуються набагато швидше, ніж його конкуренти, тому я з обережністю ставлюся до такого твердження - особливо з рефакторингом пам’яті, який доступний як попередній перегляд у поточних випусках і запланований для замовчування в 2.0.
Чарльз Даффі

6

Погляньте на порівняння, зроблене нещодавно розробниками Python: http://wiki.python.org/moin/DvcsComppare . Вони вибрали Mercurial на основі трьох важливих причин:

Вибір із Mercurial був зроблений з трьох важливих причин:

  • Згідно з невеликим опитуванням, розробники Python більше зацікавлені у використанні Mercurial, ніж у Bazaar або Git.
  • Меркуріал написаний на Python, що відповідає властивості python-dev "їсти власну собачу їжу".
  • Меркуріал значно швидший, ніж bzr (він повільніше, ніж git, хоча за значно меншою різницею).
  • Mercurial легше вивчити для користувачів SVN, ніж Bazaar.

http://www.python.org/dev/peps/pep-0374/ )


1
Mozilla і Sun також використовує Mercurial з тієї ж причини.
Джошуа Партогі,

2
bzr, написаний також у Python, справді повільніше, ніж hg, але швидко скорочуючий запас - і як користувач як Bazaar, так і Mercurial, я / категорично / не згоден з твердженням "легше вчитися".
Чарльз Даффі

1
Усі вони все ще розвиваються. Я вирішив на Bazaar для DCVS для початку, тому що я вважав, що це найпростіше (але не так багато в ньому) і Launchpad.net. Це було досить повільно. Git на OSX здається прекрасним, але погана підтримка Windows. Оскільки проекти Python та Google зараз прийняли його, а через TortoiseHg я переходжу на Mercurial. Я думаю, що Mercurial набирає критичну масу над базаром і буде там. І Git зробить своє, завжди зосереджений на Posix, тому ніколи не буде по-справжньому домінуючим.
Нік

5

Sun зробив оцінку git , Mercurial і Bazaar як кандидатів на заміну VCS Sun Teamware VCS для бази коду Solaris. Мені це здалося дуже цікавим.


3
ці оцінки дещо застаріли, новіші версії змінили деякі зазначені там недоліки.
hayalci

2

Дуже важливою відсутністю на базарі є cp. Ви не можете мати декілька файлів, що мають спільну історію, як у SVN, див., Наприклад, тут і тут . Якщо ви не плануєте використовувати cp, bzr - це чудова (і дуже проста у використанні) заміна svn.


Цього не вистачає в дизайні - cp не може бути доданий без створення ряду випадків, коли важко або неможливо бути впевненим у виконанні правильної речі при злитті між гілкою, де відбулася копія та зміни, та іншою гілкою зі змінами, але без копії .
Чарльз Даффі

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

2

Я деякий час використовував Bazaar, який мені дуже сподобався, але це були лише менші проекти, і навіть тоді це було досить повільно. Так легко вчитися, але не надто швидко. Хоча це дуже платформа x.

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

Я думаю, що основні відмінності мого досвіду використання DVCS полягають у наступному:

  1. У Git є найжвавіша спільнота, і звичайно переглядати статті про Git
  2. GitHub дійсно скелі. З Launchpad.net все гаразд, але нічого, як задоволення від Github
  3. Кількість інструментів робочого процесу для Git було великим. Він інтегрований всюди. Є кілька для Bzr, але майже не так багато або так добре доглянуті.

Підсумовуючи, Bzr був чудовим, коли я різав зуби на DVCS, але зараз я дуже задоволений Git та Github.


Ви маєте на увазі "зараз" дуже щасливий, на відміну від "не" дуже щасливий, правда?
Чарльз Даффі

Дякую Чарльзу! Трохи фрейдівське ковзання там :)
sh1mmer

1

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

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


Отже, може бути мета-питання: які питання слід задати та фактори, які слід враховувати?
Йордан Діа-Маттсон

1

Базар ІМХО простіший у навчанні, ніж git. Git має приємну підтримку в github.com.

Я думаю, ви повинні спробувати використовувати обидва і вирішити, який вам найбільше підходить.


1
Mercurial настільки ж простий, як Bazaar, порівняно швидкий порівняно з git та має гарну підтримку на Bitbucket. То що ще можна запитати?
Джошуа Партогі,

1

Що люди тут бачать як відносні сильні та слабкі сторони Git, Mercurial і Bazaar?

Це дуже відкрите питання, що межує з вогнем.

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

Усі три системи мають безліч фанбоїв. Я особисто шанувальник Базару.

Розглядаючи кожну з них та проти таких систем управління версіями, як SVN та Perforce, які питання слід враховувати?

Перші - це розподілені системи. Останні є централізованими системами. Крім того, Perforce є власником, а всі інші вільні, як у мовленні .

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

Плануючи міграцію з SVN на одну з цих розподілених систем управління версіями, які фактори ви б врахували?

По-перше, відсутність хорошої заміни TortoiseSVN. Хоча Bazaar працює над власним варіантом «Черепаха» , але його ще немає, станом на вересень 2008 року.

Потім навчання ключових людей про те, як використання децентралізованої системи вплине на їх роботу.

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


1
Для запису на поточній сторінці зазначено: "Оскільки версія Bazaar версії 1.6 TortoiseBZR включена в офіційний інсталятор", тому вона, здається, визріла.
PhiLho

1

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


1

ddaa.myopenid.com згадував це мимоволі, але, думаю, варто згадати ще раз: Bazaar може читати та писати у віддалені сховища SVN. Це означає, що ви можете використовувати Bazaar локально як доказову концепцію, поки решта команди все ще використовують Subversion.

РЕДАКТУВАННЯ: Досить багато всього цього інструменту має певний спосіб взаємодії з SVN, але зараз у мене є особистий досвід, який git svnпрацює надзвичайно добре. Я використовую його місяцями, з мінімальними гикавками.


git також має інтерфейс до svn, але у мене ще не було можливості правильно ним користуватися - utsl.gen.nz/talks/git-svn/intro.html
Cebjyre

1

Є гарне відео Лінуса Торвальда на git. Він є творцем Git, тому саме це він і просуває, але у відео він пояснює, що таке розподілені SCM і чому вони краще, ніж централізовані. Існує велика кількість порівнянь git (mercurial вважається нормальним) і cvs / svn / perforce. Також є питання аудиторії щодо міграції до розповсюдженої SCM.

Я знайшов цей матеріал освічуючим і мене продають розповсюдженій SCM. Але, незважаючи на зусилля Лінуса, мій вибір є меркурійним. Причина - bitbucket.org, я вважав, що це краще (щедріше) ніж github.

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

http://www.youtube.com/watch?v=4XpnKHJAok8


0

Системи управління розподіленими версіями (DVCS) вирішують різні проблеми, ніж централізовані ДКС. Порівнювати їх - як порівнювати молотки та викрутки.

Централізовані системи VCS розроблені з наміром, що Є Єдине Істинне Джерело, яке є Благословенним, а отже Добрим. Усі розробники працюють (замовляють) з цього джерела, а потім додають (здійснюють) свої зміни, які потім стають аналогічно благодатними. Єдина реальна різниця між CVS, Subversion, ClearCase, Perforce, VisualSourceSafe та всіма іншими CVCSes полягає в робочому процесі, продуктивності та інтеграції, які пропонує кожен продукт.

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

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


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

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