Чому Меркуріал вважається простішим за Git?


204

Переглядаючи порівняння, мені здається, що між їх наборами можливостей може бути відображення 1: 1. Тим не менш, часто цитується твердження, що "Меркуріалу простіше". Що лежить в основі цього твердження? (якщо хто-небудь)


21
Дивно, я ніколи не чув, щоб Меркуріалу було легше. Я знайшов більше документації для Git (можливо, це сприйняття), тому я дізнався це.
Nic

16
Тому що його зробив Лінус?
Робота

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


11
Цікаво, скільки людей би використовували Git, якби Github не існував, чи не було на ньому стільки гучних проектів?
Кріс С

Відповіді:


240

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

Версія Git

git filter-branch --commit-filter '
        if [ "$GIT_COMMITTER_NAME" = "<Old Name>" ];
        then
                GIT_COMMITTER_NAME="<New Name>";
                GIT_AUTHOR_NAME="<New Name>";
                GIT_COMMITTER_EMAIL="<New Email>";
                GIT_AUTHOR_EMAIL="<New Email>";
                git commit-tree "$@";
        else
                git commit-tree "$@";
        fi' HEAD

Версія Mercurial:

Файл avtor.convert.list:

<oldname>=<newname>

Командний рядок:

hg convert --authors authors.convert.list SOURCE DEST

Тепер, який із них виглядає простіше у використанні?


Примітка. Я провів 2 роки, працюючи виключно з Git, тому це не "ненавиджу, я не отримав це за 2 секунди".

Для мене це зручність використання. Git дуже орієнтований на Linux з linux-способом виконання справ. Це означає командний рядок, довідкові сторінки та придумати це для себе. У нього був дуже поганий графічний інтерфейс (зауважте: я базую це на msysGit приблизно рік тому), який, здавалося, просто заважав. Я ледве ним користувався

Командний рядок був гірший. Будучи орієнтованою на Linux програмою, у Windows це було дуже важко використовувати. Замість рідного порту вони просто завернули git за допомогою MinGW (Подумайте cygwin), що зробило роботу з ним набагато складніше. MinGW - це не командний рядок Windows, а просто діє. Божевільно, що це єдиний спосіб співпрацювати з Git. Навіть в Linux це здалося єдиним способом роботи з прямим командним рядком. Такі проекти, як RabbitVCS, допомагали деяким, але були не дуже потужними.

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

Я також ненавиджу одне місце, за яким, здається, звисає багато користувачів ОС OS git: Github. Коли ви вперше переходите на сторінку github, вона забиває вас всім, що ви можете зробити. Для мене сторінка git проектів виглядає хаотично, страшно та надмірно потужно. Навіть пояснення, що таке проект, висувається донизу. Github дійсно шкодить людям, які вже не мають повного веб-сайту. Її проблема трекера також жахлива і заплутана. Особливості перевантаження.

Користувачі Git також здавалися дуже культовими. Користувачі Git завжди є тими, хто починає "святі війни", над якими DVCS краще, що потім змушує користувачів Mercurial захищати себе. Такі сайти, як http://whygitisbetterthanx.com/, демонструють зарозумілість та майже менталітет "Використовуй моє програмне забезпечення або помирай". Я багато разів заїжджав у різні місця допомоги лише для того, щоб заграти за те, що не знаю X, заздалегідь використовував X, використовував Windows тощо. Це божевільно.


З іншого боку, Меркуріал, схоже, йде до добрішого підходу. Їх власна домашня сторінка виглядає набагато привітнішою для нових користувачів, ніж Git's . У простому пошуку Google п'ятим результатом є TortoiseHg, дуже приємний графічний інтерфейс для Mercurial. Весь їхній підхід здається спочатку простотою, потужністю пізніше.

З Mercurial у мене немає дурниць SSH (SSH - це пекло на Windows), у мене немає дурно складних команд, у мене немає культового користувача, який слідкує, у мене немає божевілля. Меркуріал просто працює.

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

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

Mercurial також просто працює вперше з невеликими налаштуваннями. У будь-якій ОС я можу просто встановити TortoiseHg і отримати всі потрібні функції (в основному команди контекстного меню) без необхідності полювати на різних Guis. Також не вистачає налаштування SSH (половина посібників там говорить про використання Putty, Plink та Pagent, а інша половина говорить про використання ssh-keygen). Для нових користувачів TortoiseHg потребує декількох хвилин, а Git займає від 30 хвилин до години з великою кількістю гугла.

Нарешті, у вас є онлайн-репост. Еквівалент Githubs - це BitBucket, який має деякі з питань, які я окреслив вище. Однак існує також код Google. Коли я переходжу до проекту Google Code , я не отримую перевантаження функцій, я отримую приємний чистий інтерфейс. Google Code - це скоріше онлайн-комбінація репо / веб-сайтів, яка справді допомагає проектам OSS, у яких не встановлено існуючий сайт. Я б почував себе дуже комфортно, використовуючи Google Code як веб-сайт моїх проектів протягом досить тривалого часу, лише будуючи веб-сайт, коли це необхідно. Його трекер випуску також є потужним, що добре вписується між майже безкорисним Tracker Issue Github та чудовиськом Bugzilla .

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


6
Коментатори : коментарі призначені для пошуку роз'яснень, а не для розширеного обговорення. Якщо у вас є рішення, залиште відповідь. Якщо ваше рішення вже розміщено, будь ласка, підкажіть його. Якщо ви хочете обговорити це питання з іншими, скористайтеся чатом . Див . FAQ для отримання додаткової інформації.

1
IntelliJ IDEA та Xcode 4 мають чудову інтеграцію з Git на відповідних платформах, і для щоденних завдань вам ніколи не доведеться використовувати командний рядок.

4
Я хотів би додати, що tortoiseGIT набагато краще зараз, коли ви хочете використовувати GIT на windows. Вам все-таки доведеться мати справу з ключами SSL, і процес установки не є плавним, але коли це зроблено, він працює легко.
Арх

2
Розширення Git мені особисто простіше орієнтуватися та працювати з ним, ніж TortoiseHG на Windows, і я використовував лише 1 командний рядок коли-небудь з git.
KallDrexx

1
Мене це бентежить таким рядком: "MinGW не є командним рядком Windows, а просто діє інше. Це божевільно, що це єдиний спосіб працювати з Git." Я використовую встановлення msysgit та варіант 2, щоб запустити з командного рядка Windows. Це чудово працює. Є кілька речей, які не спрацьовують (наприклад, карета, символ продовження рядків у DOS), але є альтернативи тим (наприклад, тильда), які добре працюють. Я не любитель командного рядка (або, принаймні, не був до того, як я почав вивчати Git), але використовувати Git з командним рядком дуже просто. Я щось пропускаю?
Kyralessa

80

Git проти Mercurial

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

Концепції Git

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


73
Тож Mercurial приховує лише вдосконалений функціонал, тоді як GIT приховує всю функціональність ... ;-)
побоюванням

4
Git має більше влади. Наприклад, немає еквівалента HEAD ~ 1 git . У Меркуріала є p (x), який перекидається на гілки, наскільки марний. У ХГ стадії немає. При натисканні всі гілки повинні бути висунуті. Mercurial просто не настільки гнучким, навіть з усіма плагінами, такими як histedit, polic і rebase. Командний рядок Git також краще, він дає підказки користувачеві, mercurials не робить. Я змушений використовувати цей трохи покалічений DVCS на роботі, і я потрапив у ситуації, коли меркуріалу бракує сил робити те, що я хочу.
Кейо

22
@Keyo: Mercurial має ~, див. Revsets . У нього немає місця постановки, але ви можете імітувати його за допомогою MQ, який набагато потужніший. Навчіться використовувати інструмент, а не дотримуватися того, що ви знаєте з git, це окупиться.
Ідан К

22
@Keyo: Вам не доведеться натискати всі гілки з Mercurial, коли ви натискаєте. Ви можете натиснути певну гілку ( hg push --branch BRANCH) або до певної версії ( hg push --rev REV). Перегляньте hg help pushдодаткові варіанти.
регент

1
FYI, можна отримати значну підмножину області постановки, використовуючи розширення запису . OTOH, я думаю, що подовження полки (за зразком команди "Стелаж" від Baazar, і близьке до "git stash") служить набагато краще більшості цілей використання області постановки.
брендізі

47

Контекст: Я щодня використовую як Mercurial (для роботи), так і Git (для побічних проектів та відкритого коду). Я в основному використовую текстові інструменти з обома (не з IDE), і я на Mac.

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

  1. Відсутність індексу. Індекс є потужним інструментом, що дозволяє багато функцій Git, але це також додатковий шар, який додає крок до багатьох речей, які я регулярно роблю. Робочий процес Mercurial більше схожий на щось на зразок svn.
  2. Перегляньте номери замість shas. Це невелика річ, яку я вважаю, що полегшує роботу з командами щодня набагато простіше в Mercurial. Під час ребазації, злиття тощо під час написання команди простіше просунути кілька номерів редакцій у голову, ніж робити те ж саме з навіть укороченими шашами.
  3. Гілки. Підхід Git до гілок шляхом іменування комітетів є потужним і істотно відрізняється від інших систем управління версіями. Це значно полегшує певні речі. Я вважаю, що підхід Меркуріала трохи краще відповідає мисленнєвому мисленню і полегшує візуальне розуміння історії галузі. Це може бути просто перевага.

6
+1 для згадування індексу; Я думаю, що індекс та його взаємодія - це те, що ускладнює засвоєння git, ніж меркурій.
Шон Макміллан

18
hgЕквівалент gitгілок на насправді називається bookmarks. Наскільки я знаю, hgфілії не мають еквівалента в git.
Хенк Гей

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

6
@Keyo - На мій досвід, gitрозгалуження - це підмножина hgрозгалуження. У hgви можете мати обидва названі і неназваних (топологічні) гілки, і навіть може управляти неназвані гілки таким же чином , як з gitдопомогою закладок. Я ніколи не бачив сенсу в області постановки. Я б швидше відмовився від небажаних змін, а потім переконайтесь, що мій код збирає та завершує мої тести, перш ніж робити його. Потім я можу відмовитись і продовжувати. Також Чарльз Бейлі «Масажними ханами» (p90 +) мене лякає * 8 '): accu.org/content/conf2011/accu2011LT_fri_share_v2.pdf
Марк Бут

7
@Keyo: У Mercurial приватні гілки називаються "закладками": оновлення до кореневої версії hg bookmark keyo-stuff, виконайте дії hg commit, а потім з часом hg push -B keyo-stuff. Якщо вам не подобаються номери версій, не використовуйте їх; Mercurial прийме хеш де завгодно, він прийме номер перегляду, я думаю. Я мушу сказати, що ваші коментарі, що б'ють Меркуріал через відсутність його функцій, насправді натрапили на незнання і трохи агресивні; ти не робиш багато добра для стереотипу користувачів Git!
Том Андерсон

29

Це дуже суб'єктивно і залежить від однієї людини до іншої, але так, я б перейшов до того, що хтось абсолютно новий у VCS або хтось із одного із ДКЦ "старої школи", Mercurial здасться простіше.

Наприклад, додавання файлів, відсутність індексу в Hg, простота повернення до старої редакції та розгалуження звідти (просто оновлення та фіксація) як одні з найбільш «очевидних» прикладів. Зараз більшість можливостей однієї системи можна імітувати в іншій, і навпаки, але це вимагає певних знань у Git, тоді як у Mercurial типові настройки (якщо ви дозволите мені їх так називати) досить "зручні для користувачів". Ці дрібниці - перемикання тут і там, неочевидна поведінка в одній команді і так далі ... ці речі складаються, і врешті-решт одна система здається легшою у використанні, ніж інша.

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


+1 для "менше wtf / хвилина" -1 для "це дуже суб'єктивно". Це не дуже суб'єктивно ... Я не знаю, чому люди все ще вважають, що відмінності інтерфейсу є суб'єктивними. Якби я взяв команду mercurial і md5 хеш, ви не зробите аргумент, що деякі люди можуть знайти хеш md5 більш інтуїтивним, ніж оригінал? (Я сподіваюся, що не). Те саме стосується і Git. Git легше, ніж меркурій, якщо ваш досвід роботи з git значно більший, ніж меркурій.
weberc2

17

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


7
Ні. Для вас занадто багато кроків робочого процесу, щоб назвати його просто "різним синтаксисом". Ви повинні зрозуміти основну модель, якою ви маніпулюєте, і весь стан індексу git, щоб використовувати Git. Скажіть, що SQL і Pascal - це два різних синтаксису, тому що однакові речі були б однаково неправильними. Git - це система версій файлової системи-контенту з функціями DVCS. Mercurial - це DVCS, який виконує не всі операції з версії файлової системи GIT, а лише підмножина, якої вимагають усі користувачі DVCS.
Warren P

9

Сприйняття можуть з часом змінюватися. Mercurial дуже добре розроблений, як і Git. Здається, Меркуріал легше вивчити (принаймні, це було для мене), і у Git виникли труднощі, з якими у мене не було паралелі. Я спробував навчитися Python і Ruby, і пішов далі, швидше з Python. Це не означає, що Python завжди і скрізь кращий за Ruby, або навіть, що він для мене кращий. Це просто те, чого я навчився і дотримувався. Програмісти часто роблять святі війни з особистих уподобань. Це роблять і інші люди.

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

Приклад зустрічного прикладу для складності GIT / mercurial: Nice GIT підтримка вбудована в XCode на Mac. Менш простий у використанні XCode з Mercurial, ніж GIT.

Мій досвід роботи з GIT до цих пір полягає в тому, що я заплутався і загубився і мені потрібно більше звертатися до документації під час її використання. Я вважаю, що було написано багато документації, але нічого, що б не дало мені змоги "пограбувати". По-друге, я можу легко змінювати та розширювати Mercurial в Python, і оскільки я вмію в Python, і як хтось насправді міг би пізнати пітон швидко, мені здається перевагою. Я також знаю C і пишу розширення Python в C, тому я припускаю, що колись мені це знадобиться, я міг би легко написати розширення Git у C.

Простота використання - це не те, що легко оцінити. Це там, і я не думаю, що це цілком суб’єктивно, але у нас немає хороших об'єктивних методик вимірювання. Якими будуть одиниці для зручності використання? Milli-iPods?

Я не настільки партизан, щоб бути 100% промеркуріальним і 100% антигіт. Мені зручніше в Mercurial зараз, в Windows і Linux, і коли я почну робити більше роботи на Mac, я сподіваюся, що спробую дотримуватися XCode + GIT.

Оновлення 2013: Зараз я використовував Mercurial AND GIT досить довго, щоб знайти деякі функції, які, як я хотів би, мати у Git, наприклад, це питання щодо стратегій злиття. Дійсно Git - це дивовижно, якщо важко вчитися, а іноді дивно складне.


7

Є кілька речей, які IMO, ймовірно, відводять нових користувачів від Git:

  1. Культура Git більш орієнтована на командний рядок. Хоча обидва інструменти, як правило, надто зосереджуються на командному рядку (як я вже говорив кілька разів, інструкції командного рядка можуть бути потужними та більш вільними, але вони не є хорошою маркетинговою стратегією ), це значно більше стосується Git. Якщо Mercurial має фактичний стандартний інструмент для графічного інтерфейсу в TortoiseHg, який є навіть варіантом завантаження за замовчуванням для користувачів Windows на домашній сторінці Mercurial, Git має кілька конкуруючих передніх інтерфейсів GUI (TortoiseGit, Git Extensions, gitk тощо), які недостатньо добре рекламуються. на веб-сайті Git, і всі вони все-таки мають повний погляд. (Чорний текст на червоних етикетках? C'mon, TortoiseGit, ви можете зробити це краще!) У спільноті Git також є набагато більш поширене ставлення до того, що люди, які використовують засоби GUI, не є належними розробниками програмного забезпечення.

  2. У Git є кілька нестандартних стандартних налаштувань, які мають ідеальний сенс для досвідчених користувачів, але, швидше за все, вони будуть дивними, якщо не залякують нових користувачів. Наприклад, набагато агресивніше стосується автоматизації таких завдань, як злиття (наприклад, git pull автоматично зливається і виконує, де це можливо). Існує випадок повністю автоматизованих об'єднань , але більшість недосвідчених користувачів жахнуться злиттям, і їм потрібно надати можливість отримати впевненість у своїх інструментах, перш ніж розблокувати повну потужність у вихідному коді.

  3. Документація та властива їй складність:

    $ hg help log | wc -l
    64
    $ git help log | wc -l
    912
    

3
Насправді, я віддаю перевагу допомогу, довжиною 912 рядків, ніж допомогу, яка дорівнює 64.
Dysaster

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

2
Я хочу і GUI, і допомогу. :) Те, що мені здається інтуїтивно зрозумілим, - це безлад для когось іншого.
Дастера

1
Звичайно, але коли потрібна допомога, слід легко дотримуватися її.
jammycakes

3
Я придумав нову аналогію; Git - це як C ++ (вибачте Лінус!), А Mercurial - як Паскаль. Те, що є неявним і що може бути зроблено лише одним способом у Pascal (або Mercurial), можна зробити явно, дев'ятнадцять різних способів на C ++ (і Git). Деякі люди віддають перевагу powertools з більшою кількістю кнопок і важелів, і Git це.
Warren P

3

Я можу придумати одне

git add .
git commit -am "message"

vs.

hg ci -Am "message"

git commit -aне додає новостворених файлів, hg ci -Aале це означає, що те, що вимагає двох команд з git, може бути виконано однією командою в Mercurial. Знову ж таки, "менший набір тексту" не обов'язково означає "більш зручний для користувачів".


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

3
Досить справедливо, але я вважаю, що hg ciбез -Aпрапора це еквівалент git commit -a. Я використовував git набагато більше, ніж рт.ст., тому я не впевнений на 100%.
Чжехао Мао

Я перевірив, hg ci== git commit -a.
Чжехао Мао

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

1
чому б ви "git add". а потім "git commit -am"? Чи все не було б додано до індексу?
jacobangel

3

Тому що це.

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

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

Я згоден з вищенаведеним коментарем і щодо Hginit , це, безумовно, полегшило зрозуміти меркурій . Добре написано і дуже легко зрозуміти. Жодна документація, написана для git, не наближається. Я, наприклад, знаходжу більшість того, що написано Скоттом Чейконом (який вручну написав більшість документації / книг про git) особливо заплутаним.

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