Днями почав працювати з Mercurial. На перший погляд він Охуенно. Про що тут і повідаю.
Про меркуріале вже є досить багато інформації, в тому числі і російською. наприклад:
Я спробую не розписувалися докладно те, що вже неодноразово розписано, а описати свої враження. А так же показати, як людині знайомому з Subversion, можна швидко помацати Mercurial для, так би мовити, першого ознайомлення.
Так само прохання знаючим людям тикати мене носом в місця, де я не маю рації.
Передісторія коротенько
Деякі моменти я все-таки повторю.
До останнього часу на ринку систем контролю версій рулювали централізовані системи. Найбільш відомий представник - Subversion (SVN). У подібній системі є центральний репозиторій і якась кількість клієнтів, кожен зі своєю робочою версією. Клієнти вносять зміни в свої робочі версії і відправляють, коли потрібно в репозиторій (commit), звідти ж отримують зміни від інших (update).
І ось з'явилися децентралізовані системи, в яких все на перший погляд набагато заплутаніше (додатково все заплутує моє монстрячество в паинт):
Тут кожен з простих смертних обзавівся своїм локальним репозиторієм і працює з ним. Коли виникає необхідність, розробники синхронізують свої репозиторії.
Якась подоба централізованності сюди вносить репозиторій на сервері. Насправді він нічим не відрізняється від інших. Більш докладно про всі ці тонкощі трохи нижче.
Децентралізованих систем контролю версій (DVCS) набралося вже досить: git, mercurial, bazaar, darcs. Самий офігенний з них git. Git настільки офігенна і настільки в ньому все легко і просто, що хрін розберешся, як він взагалі працює. Mercurial, хоча і не так офігенно, але трохи ближче до SVN і переходити з VCS на DVCS я вирішив з нього.
переваги
Ось список переваг Mercurial перед SVN, які я відкрив вже з самого початку:
- Набагато зручніше працювати з гілками. Після меркуріала розумієш, що в SVN гілки були зроблені реально через жопу.
- Папки проекту на засмічуються цими богомерзкими «.svn», які іноді реально напружують.
- Випадкове видалення / перейменування файлу безпосередньо не доставляє стільки проблем, як в SVN.
- Швидкість: в порівнянні з svn, mercurial просто літає (на великих обсягах не перевіряв, але за відгуками літає і на них).
- Можна Коміто в свою локальну ріпу, не маючи інтернету.
- Можна обмінюватися даними з іншими розробниками в будь-якому порядку, минаючи «центральну» ріпу.
Що найцікавіше, до переваг саме розподіленої системи відносяться тільки останні два пункти. У більшості статей їх зазвичай і приводять в якості головних козирів. Однак, принаймні для мене, вони значно менш значущі, ніж, наприклад, зручне розгалуження. Так що виходить, що Mercurial краще, ніж SVN не тільки тому, що він розподілене, а просто тому що просто краще зроблений.
недоліки
З недоліків поки навіть нічого великого придумати не можу.
Єдине - дуже багато зав'язано на гілки. Спочатку серед всіх цих гілок і голів (heads) можна заплутатися. Однак досить швидко наздоганяєш і все стає значно простіше.
Безсумнівно, немає нічого ідеального і при тривалій роботі неприємні речі напевно полізуть в чималій кількості, але поки все радує.
Ставимо Mercurial на Windows
Так як я відморожений віндузятнікі, описувати все буду на прикладі вінди.
Аналогічно TortoiseSVN, для Mercurial є TortoiseHg. Його можна для початку і поставити. Хоча справжні поца цілком можуть обійтися і без графічних фішок.
Вау, Tortoise вбудувався в контекстне меню.
Втім ми теж не будемо зловживати візуальними примочками, а більшість операцій будемо робити через стару добру консоль. Mercurial доступний тепер через команду hg.
Занадто багато букв. Відкладемо інші для другої частини →.