Mercurial head всьому голова, блог го

З моменту написання попередньої частини пройшло два тижні, але за цей час відбулося чимало подій. Зарелізілісь Mercurial 1.5 і TortoiseHg 1.0. а Джоел Спольскі написав туторіал по mercurial. Що характерно, оповідання своє, Джоел розбавив балками віндового консолі, що дозволяє мені в таємниці сподіватися, що перед цим він читав мій блог :)

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

Сьогодні тема буде невелика і, на перший погляд, проста. Однак і тут можна заплутатися. Отже - голови (heads) в Mercurial.

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

Створимо для тестів новий робочий каталог і репозиторій.

Доведемо справу до першої ревізії.

Як видно, головою є наша перша і поки єдина ревізія.


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

Анонімні гілки

Ті гілки-бранчі, які ми розглядали минулого разу насправді є лише окремим випадком гілок (іменовані гілки). Крім них, можливі і анонімні гілки.

Анонімну гілка створити простіше простого (настільки просто, що можна створити випадково, коли вона і не потрібна). Відкотимося на попередню ревізію і продовжимо розробку паралельно вже зробленому.

Mercurial head всьому голова, блог го

Зверніть увагу: «created new head». Тепер у 0-й ревізії відразу дві ревізії-нащадка, а у них самих нащадків немає - вони обидві голови:

У нас утворилося дві гілки розробки (при тому, що branch як і раніше один - default). У цих гілках можна продовжувати паралельну розробку (голова кожної гілки буде переходити до наступних ревізій), можна плодити ще гілки, ну і найприємніше: гілки можна зливати разом.

Ми злили дві гілки (об'єднали дві голови в одну). Тепер обидві попередні голови є предками нової ревізії, яка і стала нашої поточної єдиною головою.

Mercurial head всьому голова, блог го

Зауважте, що у ревізії може бути не більше двох предків, тобто злити одночасно можна тільки дві голови. Так як у нас тільки дві голови і було, то нам вистачило виклику hg merge без параметрів. Якщо ж голів було б більше, довелося б точно вказувати яку з них слід злити з поточної.

Іменовані гілки (branches)

Тепер подивимося на branch'і новим поглядом.

Створимо для тестів новий репозиторій:

Зробимо пару комита в default-гілка:

А тепер відгалузилося гілка «one» і туди ще парочку.

Mercurial head всьому голова, блог го

Перевіримо, що у нас з гілками і головами:

От халепа, гілки у нас тепер дві, а голова все одна.

Ревізія # 1, яка є останньою в галузі default і, на перший погляд, повинна бути її головою, насправді їй бути не може. Просто тому, що вона має нащадка (ревізію # 2, нехай вона і з іншої гілки). Таким чином, галузь default взагалі залишилася без голови і позначена в списку, як (inactive).

Так приробити їй голову! Спочатку повернемося в default-гілку:

Зверніть увагу на те, чому ці гілки називаються «іменованими». «Ім'я» default тут просто є синонімом останньої ревізії з відповідною гілки. Тобто, ми могли рівно з тим же успіхом написати hg update 1.

Ми створили голову в гілці default (created new head).

Mercurial head всьому голова, блог го

Перевіримо, що вийшло

Тепер є дві голови, а default стала повноцінною гілкою.

Замість hg merge one я випендритися і написав hg merge 3 з тим, щоб знову вказати на те, що one. це всього лише «іменування» ревізії # 3 (останньої в іменованої гілці one).

Mercurial head всьому голова, блог го

Голови злилися в одну. Так як ми «вливали» гілку one в гілку default. голова ця належить default. Гілка one. таким чином, залишилася взагалі без голови і стала inactive.

Гілки з подветви

Для трохи кращого розуміння (або остаточного заплутування), розглянемо наступне перекручення:

Mercurial head всьому голова, блог го

Мало того, що тут у нас дві іменовані гілки, так ще й в кожної з них, по дві анонімні. Тобто в підсумку, у нас 4 голови (# 3, # 4, # 5 і № 6).

Отже, питання, на що вказують імена default і test. Відповідь: вони вказують на останні ревізії в своїх гілках (відповідно, # 5 і № 6). Це видно в списку гілок:

В яку ревізію будуть вливатися зміни при merge. В ту, в якій перебуваємо. Перейдемо в # 4 і смержімся з test.

І що у нас вийшло? А вийшло ось що:

Mercurial head всьому голова, блог го

Пішла тільки одна голова (# 6) і одна голова змінила ревізію (# 4 → 7). Всі інші залишилися, в тому числі і одна з голів гілки test. за рахунок чого, та продовжує бути активною.

Можна зробити ще багато подібних безглуздих речей ...

Схожі статті