Mercurial: первые впечатления (часть 1)

mercurial logo

На днях начал работать с Mercurial. На первый взгляд он охуенен. О чём здесь и поведаю.

Для тех, кто не в курсе, Mercurial, это система контроля версий. Типа SVN, но не SVN. Для тех, кто не в курсе что такое SVN, читать дальше бессмыссленно.

О меркуриале уже есть достаточно много информации, в том числе и на русском. Например:

Я попробую не расписывать подробно то, что уже неоднократно расписано, а описать свои впечатления. А так же показать, как человеку знакомому с Subversion, можно быстро пощупать Mercurial для, так сказать, первого ознакомления.

Так же просьба знающим людям тыкать меня носом в места, где я не прав.

Предыстория вкратце

Некоторые моменты я всё-таки повторю.

До последнего времени на рынке систем контроля версий рулили централизованные системы. Наиболее известный представитель — Subversion (SVN). В подобной системе есть центральный репозиторий и какое-то количество клиентов, каждый со своей рабочей версией. Клиенты вносят изменения в свои рабочие версии и отправляют, когда нужно в репозиторий (commit), оттуда же получают изменения от других (update).

VCS

И вот появились децентрализованные системы, в которых всё на первый взгляд намного запутаннее (дополнительно всё запутывает моё монстрячество в паинте):

DVCS

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

Какое-то подобие централизованности сюда вносит репозиторий на сервере. На самом деле он ничем не отличается от других. Более подробно обо всех этих тонкостях чуть ниже.

Децентрализованных систем контроля версий (DVCS) набралось уже достаточно: git, mercurial, bazaar, darcs. Самый офигенный из них git. Git настолько офигенен и настолько в нём всё легко и просто, что хрен разберёшься, как он вообще работает. Mercurial, хотя и не так офигенен, но несколько ближе к SVN и переходить с VCS на DVCS я решил с него.

Преимущества

Вот список преимуществ Mercurial перед SVN, которые я открыл уже с самого начала:

  • Гораздо удобнее работать с ветками. После меркуриала понимаешь, что в SVN ветки были сделаны реально через жопу.
  • Папки проекта на замусориваются этими богомерзкими «.svn», которые иногда реально напрягают.
  • Случайное удаление/переименование файла напрямую не доставляет столько проблем, как в SVN.
  • Скорость: по сравнению с svn, mercurial просто летает (на больших объёмах не проверял, но по отзывам летает и на них).
  • Можно комитить в свою локальную репу, не имея интернета.
  • Можно обмениваться данными с другими разработчиками в любом порядке, минуя «центральную» репу.

Что самое интересное, к преимуществам именно распределённой системы относятся только последние два пункта. В большинстве статей их обычно и приводят в качестве главных козырей. Однако, по крайней мере для меня, они значительно менее значимы, чем, например, удобное ветвление. Так что получается, что Mercurial лучше, чем SVN не только потому, что он распределённый, а просто потому что просто лучше сделан.

Недостатки

Из недостатков пока даже ничего крупного придумать не могу.

Единственное — слишком много завязано на ветки. Поначалу среди всех этих веток и голов (heads) можно запутаться. Однако достаточно быстро догоняешь и всё становится значительно проще.

Несомненно, нет ничего идеального и при длительной работе неприятные вещи наверняка полезут в немалом количестве, но пока всё радует.

Ставим Mercurial на Windows

TortoiseHg
Так как я отмороженный виндузятник, описывать всё буду на примере винды.

Аналогично TortoiseSVN, для Mercurial есть TortoiseHg. Его можно для начала и поставить. Хотя настоящие поцаны вполне могут обойтись и без графических фишек.

Вау, Tortoise встроился в контекстное меню.

Впрочем мы тоже не будем злоупотреблять визуальными примочками, а большинство операций будем делать через старую добрую консоль. Mercurial доступен теперь через команду hg.

Формат вызова:

hg <команда> [<ключи>]
hg - краткая справка
hg help - полная
hg help <команда> - справка по определённой команде
C:\hg>hg
Mercurial Distributed SCM

basic commands:

 add        add the specified files on the next commit
 annotate   show changeset information by line for each file
 clone      make a copy of an existing repository
 commit     commit the specified files or all outstanding changes
...
C:\hg>hg help add
hg add [OPTION]... [FILE]...

add the specified files on the next commit

    Schedule files to be version controlled and added to the repository.

    The files will be added to the repository at the next commit. To undo an
    add before that, see hg forget.

    If no names are given, add all files to the repository.

options:

 -I --include  include names matching the given patterns
 -X --exclude  exclude names matching the given patterns
 -n --dry-run  do not perform actions, just print output

use "hg -v help add" to show global options 

Слишком много букв. Отложим остальные для второй части →.

17 комментариев »

  • У тебя самая развернутая статья получилась, из всех которых читал про меркуриал

    adw0rd, 21.02.2010, 23:05

  • Ну что, мне поднимать меркуриал на серваке?

    adw0rd, 21.02.2010, 23:07

  • Поднимать

    vasa_c, 21.02.2010, 23:18

  • А я эту херню так сразу и не понял. Заморочка какая-то. Может у меня просто трава не того сорта.

    Hight, 22.02.2010, 2:53

  • Чего не понял? С какими концептуальными сложностями столкнулся?

    vasa_c, 22.02.2010, 12:25

  • >> Чего не понял?
    Уже и не помню. Давно дело было. Да пофигу пока, будет задачка, буду разбираться.

    Hight, 25.02.2010, 18:12

  • Ну мне нечего написать по поводу меркуриал, т.к. проект который мы с использованием его хотели писать умер не родившись, но я хочу в очередной раз заметить что vasa_c охуенен!

    dallone, 12.03.2010, 15:02

  • Спасибо, Далошка. А вот adw0rd не осилил :)

    vasa_c, 12.03.2010, 15:12

  • hq пиздат, ноя остаюсь на svn. реально мне эти фишки ничего не дают.

    artoodetoo, 2.06.2010, 5:41

  • r2d2, а как «свой»-локальный репозитарий? Ведь ради этой фишки и стоит переходить.

    mario, 23.11.2010, 18:54

  • Это конечно пздц: «Для тех, кто не в курсе что такое SVN, читать дальше бессмыссленно». А нахуа заради меркуриала надо знать SVN?

    LOL, 21.10.2013, 14:39

  • LOL, затем, что статья построена, не как рассказ о меркуриале с самых азов, начиная с того, что такое системы контроля версий и зачем они, а как сравнение с SVN.

    vasa_c, 21.10.2013, 14:43

  • работаю с меркуриал, и при клонировании репозитория через ssh выдает ошибку что ssh не является внутренней или внешней командой. как так?

    Денис, 20.06.2014, 22:33

  • Денис, недостаточно данных для разумного ответа

    vasa_c, 21.06.2014, 20:01

  • спасибо я уже разобрался. вот другая проблема меня настигла: командны меркуриала из командной строки выполняются только в пределах папки где установлен меркуриал. т.е если из любой дрогой директории вызываю hg init, пишет ошибку что hg не является внутренней или внешней командой.

    Денис, 22.06.2014, 0:14

  • Денис, если win, то, видимо, нужно в PATH прописать путь к каталогу.

    vasa_c, 22.06.2014, 12:00

  • Денис, было то же самое, оказалось запускал не под администратором, а надо именно так.

    Сергей, 8.05.2015, 14:21

Leave a comment

© Олег Григорьев, 2008—2017. Пишите: go@blgo.ru