<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="http://178.140.10.58:8080/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="http://178.140.10.58:8080/feed.php">
        <title>Библиотека знаний - hg_init</title>
        <description>Заметки IT программиста</description>
        <link>http://178.140.10.58:8080/</link>
        <image rdf:resource="http://178.140.10.58:8080/lib/exe/fetch.php?media=wiki:dokuwiki.svg" />
       <dc:date>2026-04-17T09:39:48+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_1._%D0%BF%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_subversion"/>
                <rdf:li rdf:resource="http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_2._%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_mercurial"/>
                <rdf:li rdf:resource="http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_3._%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_mercurial"/>
                <rdf:li rdf:resource="http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_3._%D0%BF%D1%80%D0%B8%D0%B2%D1%8B%D0%BA%D0%B0%D0%B5%D0%BC_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%82%D1%8C_%D0%B2_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B5"/>
                <rdf:li rdf:resource="http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_4._%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B8"/>
                <rdf:li rdf:resource="http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_5._%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81_%D1%81%D0%BB%D0%B8%D1%8F%D0%BD%D0%B8%D1%8F"/>
                <rdf:li rdf:resource="http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_6._%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B5%D0%B2"/>
                <rdf:li rdf:resource="http://178.140.10.58:8080/doku.php?id=hg_init:start"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="http://178.140.10.58:8080/lib/exe/fetch.php?media=wiki:dokuwiki.svg">
        <title>Библиотека знаний</title>
        <link>http://178.140.10.58:8080/</link>
        <url>http://178.140.10.58:8080/lib/exe/fetch.php?media=wiki:dokuwiki.svg</url>
    </image>
    <item rdf:about="http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_1._%D0%BF%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_subversion">
        <dc:format>text/html</dc:format>
        <dc:date>2016-02-16T14:09:41+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Hg Init: Переобучение для пользователей Subversion. Часть 1.</title>
        <link>http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_1._%D0%BF%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_subversion</link>
        <description>&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:scm&amp;amp;do=showtag&amp;amp;tag=scm&quot; class=&quot;wikilink1&quot; title=&quot;tag:scm&quot; rel=&quot;tag&quot;&gt;scm&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:mercurial&amp;amp;do=showtag&amp;amp;tag=mercurial&quot; class=&quot;wikilink1&quot; title=&quot;tag:mercurial&quot; rel=&quot;tag&quot;&gt;mercurial&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:hg&amp;amp;do=showtag&amp;amp;tag=hg&quot; class=&quot;wikilink1&quot; title=&quot;tag:hg&quot; rel=&quot;tag&quot;&gt;hg&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;h1 class=&quot;sectionedit1&quot; id=&quot;hg_initпереобучение_для_пользователей_subversion_часть_1&quot;&gt;Hg Init: Переобучение для пользователей Subversion. Часть 1.&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&amp;lt;html&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;    &amp;lt;h5&amp;gt;Hg Init: Учебное пособие по Mercurial.&amp;lt;/h5&amp;gt;&amp;lt;br&amp;gt;&lt;/pre&gt;

&lt;p&gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/eebea7f1/5482efc4/01467053/55589e0f.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/eebea7f1/5482efc4/01467053/55589e0f.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/eebea7f1/5482efc4/01467053/55589e0f.png&lt;/a&gt;&amp;quot; align=&amp;quot;left&amp;quot;&amp;gt;Mercurial — это современная распределенная система контроля версий с открытым кодом. Эта система — заманчивая замена для более ранних систем вроде Subversion. В этом простом учебном пособии в шести частях Джоэль Спольски (&amp;lt;a href=&amp;quot;&lt;a href=&quot;http://www.joelonsoftware.com/&quot; class=&quot;urlextern&quot; title=&quot;http://www.joelonsoftware.com/&quot; rel=&quot;ugc nofollow&quot;&gt;http://www.joelonsoftware.com/&lt;/a&gt;&amp;quot;&amp;gt;Joel Spolsky&amp;lt;/a&amp;gt;) рассказывает о ключевых принципах Mercurial.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Если вы использовали Subversion, то Mercurial будет непонятным. Эта часть рассказывает о главных отличиях при работе с Mercurial. Если вы никогда не использовали Subversion, то можете просто &amp;lt;a href=&amp;quot;&lt;a href=&quot;http://habrahabr.ru/blogs/development_tools/108658/&quot; class=&quot;urlextern&quot; title=&quot;http://habrahabr.ru/blogs/development_tools/108658/&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrahabr.ru/blogs/development_tools/108658/&lt;/a&gt;&amp;quot;&amp;gt;пропустить эту часть&amp;lt;/a&amp;gt;.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;h4&amp;gt;Часть 1. Переобучение для пользователей Subversion&amp;lt;/h4&amp;gt;&amp;lt;br&amp;gt;
В каком же я был смятении, когда программисты в моей компании решили сменить Subversion на Mercurial!&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/33c920fc/5fefe056/7d9c727b/7761db50.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/33c920fc/5fefe056/7d9c727b/7761db50.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/33c920fc/5fefe056/7d9c727b/7761db50.png&lt;/a&gt;&amp;quot; align=&amp;quot;left&amp;quot;&amp;gt;Для начала, я начал приводить всевозможные тупые причины, по которым нам не надо ничего менять. «Мы должны хранить репозиторий на центральном сервере, так безопаснее», — сказал я. Знаете что? Я был неправ. При работе с Mercurial у каждого разработчика на жестком диске хранится полная копия репозитория. Это, на самом деле, &amp;lt;i&amp;gt;безопаснее&amp;lt;/i&amp;gt;. В любом случае, почти в каждой команде, использующей Mercurial, центральный репозиторий тоже существует. И вы можете делать резервное копирование этого репозитория со всей необходимой одержимостью. А еще можете устроить трехступенчатую защиту с &amp;lt;a href=&amp;quot;&lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%A1%D0%B0%D0%B9%D0%BB%D0%BE%D0%BD%D1%8B&quot; class=&quot;urlextern&quot; title=&quot;http://ru.wikipedia.org/wiki/%D0%A1%D0%B0%D0%B9%D0%BB%D0%BE%D0%BD%D1%8B&quot; rel=&quot;ugc nofollow&quot;&gt;http://ru.wikipedia.org/wiki/%D0%A1%D0%B0%D0%B9%D0%BB%D0%BE%D0%BD%D1%8B&lt;/a&gt;&amp;quot;&amp;gt;Сайлонами&amp;lt;/a&amp;gt;, Штурмовиками и прелестными &amp;lt;a href=&amp;quot;&lt;a href=&quot;http://en.wikipedia.org/wiki/Labradoodle&quot; class=&quot;urlextern&quot; title=&quot;http://en.wikipedia.org/wiki/Labradoodle&quot; rel=&quot;ugc nofollow&quot;&gt;http://en.wikipedia.org/wiki/Labradoodle&lt;/a&gt;&amp;quot;&amp;gt;лабрадудлами&amp;lt;/a&amp;gt; или что там требует ваш IT-отдел.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;a name=&amp;quot;habracut&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
«Проблема с распределенными системами контроля версий в том, что они позволяют слишком легко делать ветки (branch)», — сказал я. «А ветки всегда приносят проблемы». Получается, что тут я тоже был неправ. Волна такая пошла. Ветки несут проблемы &amp;lt;i&amp;gt;при работе с Subversion&amp;lt;/i&amp;gt;, потому что &amp;lt;i&amp;gt;Subversion&amp;lt;/i&amp;gt; не хранит достаточно информации для того, чтобы &amp;lt;i&amp;gt;слияние&amp;lt;/i&amp;gt; (merge) нормально работало. В Mercurial слияние безболезненно и легко, а потому ветвление распространено и безвредно.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Потом я сказал: «Хорошо, я буду использовать эту систему, но не ждите, что я смогу в ней разобраться». И я попросил Джейкоба сделать для меня шпаргалку, в которой будет все, что я обычно делал в Subversion, с указанием аналогов в Mercurial.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Я могу показать вам эту шпаргалку, но не буду, потому что она несколько месяцев мешала моим мозгам перестроиться.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Получается что, если вы использовали Subversion, то ваша голова немного… Э-э-э, как бы помягче сказать? Вы ранены во всю голову! Нет, не получилось. Вам нужно переобучение. Я ходил таким раненным полгода и думал, что Mercurial &amp;lt;i&amp;gt;более сложен&amp;lt;/i&amp;gt;, чем Subversion. Но это потому, что я не понимал, как новая система на самом деле работала. Как только я понял, как она работает, оказалось — опа! да это достаточно просто.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Вот я и написал для вас это пособие, в котором очень старался &amp;lt;i&amp;gt;не&amp;lt;/i&amp;gt; объяснять все в терминах Subversion, потому что хватит уже раненных во всю голову. Их и так достаточно. Вместо этого, для тех, кто переходит на Mercurial с Subversion, я написал эту часть в начале пособия, которая постарается аннулировать как можно больше вреда, чтобы вы могли изучить Mercurial с чистого листа.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;b&amp;gt;Если вы никогда не использовали Subversion, то можете перейти к следующей статье (&amp;lt;a href=&amp;quot;&lt;a href=&quot;http://habrahabr.ru/blogs/development_tools/108658/&quot; class=&quot;urlextern&quot; title=&quot;http://habrahabr.ru/blogs/development_tools/108658/&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrahabr.ru/blogs/development_tools/108658/&lt;/a&gt;&amp;quot;&amp;gt;«Основы Mercurial»&amp;lt;/a&amp;gt;) и ничего не упустите.&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Готовы? Хорошо, начнем с короткого опроса.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;blockquote&amp;gt;&amp;lt;b&amp;gt;Вопрос первый:&amp;lt;/b&amp;gt; Вы всегда с первого раза пишите идеальный код?&amp;lt;/blockquote&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Если вы ответили «Да» на первый вопрос, то вы врун и жулик. Получите «банан» и приходите на пересдачу.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Новый код глючен. Требуется время, чтобы он начал прилично работать. А пока этот код может повредить остальным разработчикам в команде.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
И вот, как работает Subversion:&amp;lt;br&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Когда вы вносите новый код в репозиторий, его получают все.&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Так как весь новый код, который вы пишите, содержит баги, то у вас есть выбор.&amp;lt;br&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;Вы можете вносить глючный код и сводить людей с ума, или&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Вы можете придерживать новый код до тех пор, пока полностью его не отладите.&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Subversion постоянно ставит вас перед этим ужасным выбором. Или репозиторий полон глючного кода, потому что содержит новый код, который только что написан, &amp;lt;i&amp;gt;или&amp;lt;/i&amp;gt; новый код, что только что написан, не добавлен в репозиторий.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Как пользователи Subversion, мы настолько привыкли к этой дилемме, что трудно представить себе систему, где эта дилемма не существует.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Команда, использующая Subversion, часто днями или неделями ничего не добавляет в репозиторий. В таких командах новички боятся залить что-то в репозиторий из-за опасения поломать билд, или разозлить Майка, ведущего разработчика, или по сходным причинам. Майк однажды так рассердился из-за изменений, которые поломали билд, что ворвался к практиканту, смахнул все с его стола и проорал: «Это твой последний день!». Этот день не был последним, но бедный практикант практически намочил штаны.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Все эти страхи и опасения означают, что люди пишут код неделя за неделей &amp;lt;i&amp;gt;не используя преимуществ системы контроля версий&amp;lt;/i&amp;gt;, а затем ищут кого-нибудь опытного, чтобы внести код в репозиторий. И для чего репозиторий, если им нельзя пользоваться?&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Вот простая иллюстрация жизни с Subversion:&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/d15885f7/9ebf875d/5d83d6f4/f6ea14f3.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/d15885f7/9ebf875d/5d83d6f4/f6ea14f3.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/d15885f7/9ebf875d/5d83d6f4/f6ea14f3.png&lt;/a&gt;&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
При работе с Mercurial &amp;lt;i&amp;gt;у каждого разработчика свой собственный репозиторий, живущий у них на компьютере:&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/df9ce736/7f3b9699/aa8bb2bb/b5180086.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/df9ce736/7f3b9699/aa8bb2bb/b5180086.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/df9ce736/7f3b9699/aa8bb2bb/b5180086.png&lt;/a&gt;&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Так что вы можете вносить изменения в свой репозиторий и пользоваться всеми благами системы контроля версий, когда захотите. Каждый раз, чуть улучшив код, вы можете вносить его в репозиторий.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Когда код надежен, и вы хотите дать другим его использовать, вы проталкиваете (push) ваши изменения из своего репозитория в центральный репозиторий. Из центрального репозитория каждый вытягивает (pull) общие изменения и рано или поздно все получат ваш новый код. Когда он готов.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;i&amp;gt;Mercurial разделяет момент внесения кода в репозиторий и момент получения этого кода всеми остальными.&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
И это означает, что вы можете коммитить (
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg com&lt;/pre&gt;

&lt;p&gt;
), но все остальные не получат ваши изменения. Когда у вас накопятся изменения, которые вас устраивают, которые стабильны и все круто, вы проталкиваете (
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg push&lt;/pre&gt;

&lt;p&gt;
) их в главный репозиторий.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;h5&amp;gt;Еще одно большое концептуальное отличие&amp;lt;/h5&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Вы знаете, что у каждой улицы есть название? &amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/0a94d9a4/417a4639/b4495b24/db298b24.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/0a94d9a4/417a4639/b4495b24/db298b24.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/0a94d9a4/417a4639/b4495b24/db298b24.png&lt;/a&gt;&amp;quot; align=&amp;quot;right&amp;quot;&amp;gt;Ну, оказывается что в Японии это не совсем так. Японцы обычно просто &amp;lt;a href=&amp;quot;&lt;a href=&quot;http://sivers.org/jadr&quot; class=&quot;urlextern&quot; title=&quot;http://sivers.org/jadr&quot; rel=&quot;ugc nofollow&quot;&gt;http://sivers.org/jadr&lt;/a&gt;&amp;quot;&amp;gt;нумеруют кварталы&amp;lt;/a&amp;gt; между улицами и только очень, очень важные улицы имеют названия.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
У Subversion и Mercurial есть сходное различие.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
В Subversion мыслят &amp;lt;i&amp;gt;ревизиями&amp;lt;/i&amp;gt;. Ревизия — это то, как выглядит вся файловая система в определенный момент времени.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
В Mercurial вы мыслите &amp;lt;i&amp;gt;наборами изменений (changesets)&amp;lt;/i&amp;gt;. Набор изменений — это четкий список изменений между двумя соседними ревизиями.&amp;lt;br&amp;gt;
 &amp;lt;br&amp;gt;
Шесть того или полдюжины этого — в чем разница?&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Вот в чем разница. Представьте, что вы и я вместе работаем над каким-то кодом. И мы сделали ветки этого кода, и каждый пошел на свое место и сделал много-много независимых изменений в коде, так что ветки достаточно сильно разошлись в разные стороны.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Когда нам нужно сделать слияние, Subversion смотрит на обе ревизии — мой измененный код и ваш измененный код — и пытается угадать, как слепить их вместе в один большой страшный бардак. Обычно Subversion это не удается, и получаются длинные списки конфликтов («merge conflicts»), которые на самом деле не конфликты, а просто места, в которых система не смогла разобраться в наших изменениях.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Для сравнения, если мы независимо работали в Mercurial, то система сохраняла &amp;lt;i&amp;gt;серии изменений&amp;lt;/i&amp;gt;. Таким образом, когда мы хотим сделать слияние кода, у Mercurial на самом деле гораздо больше информации: система знает, &amp;lt;i&amp;gt;что каждый из нас изменил&amp;lt;/i&amp;gt;, и может &amp;lt;i&amp;gt;заново применить эти изменения&amp;lt;/i&amp;gt; вместо того, чтобы смотреть на конечный вариант и пытаться угадать, как все это собрать воедино.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Если, для примера, я немного изменил какую-то функцию и перенес ее куда-то, то Subversion на самом деле не помнит этого. Так что когда дело дойдет до слияния, она просто может решить, что в коде из ниоткуда появилась новая функция. В то же время, Mercurial запомнит: функция изменилась, функция переместилась. Это значит, что если вы тоже поменяли эту функцию, то вероятность того, что Mercurial успешно проведет слияние наших изменений, гораздо больше.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Так как Mercurial мыслит в терминах наборов изменений, вы можете делать интересные вещи с этими наборами изменений. Вы можете дать попробовать эти изменения другу вместо того, чтобы вносить эти изменения в центральный репозиторий и вынуждать всех ими пользоваться.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Если все это кажется вам немного запутанным — не переживайте. По мере чтения этого пособия все обретет ясный смысл. В данный момент самое главное, что вам нужно знать: из-за того, что Mercurial оперирует наборами изменений, а не ревизиями, &amp;lt;i&amp;gt;слияние кода в Mercurial работает гораздо лучше, чем в Subversion&amp;lt;/i&amp;gt;.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
И это значит, что &amp;lt;i&amp;gt;вы можете свободно делать ветки&amp;lt;/i&amp;gt;, потому что слияние не будет кошмаром.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Хотите узнать кое-что забавное? Почти у каждой команды, использующей Subversion, с членами которой я разговаривал, есть некий вариант одной и той же истории. История настолько часто встречается, что я просто назову ее «Главной историей про Subversion». Вот эта история: в определенный момент они попробовали сделать ветку в развитии кода. Обычно для того, чтобы версия, которую отдали клиентами, была отделена от версии, с которой возятся разработчики. И все рассказывали мне, что когда они попробовали сделать это, то все было отлично &amp;lt;i&amp;gt;до момента, когда им нужно было сделать слияние&amp;lt;/i&amp;gt;. И слияние было кошмаром. То, что должно было быть пятиминутным процессом, превратилось в шесть программистов вокруг одного компьютера, работавших две недели, пытаясь вручную внести каждый багфикс из стабильной ветки в ветку разработчиков.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
И почти в каждой команде мне сказали, что они поклялись «больше никогда» и отказались от веток. И теперь они делают так: каждая новая фича в большом 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;#ifdef&lt;/pre&gt;

&lt;p&gt;
 блоке. Так они могут работать всегда в стволе репозитория, а клиенты никогда не получают новый код пока он не отлажен, и, откровенно говоря, это нелепо.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Отделять стабильный и разрабатываемый код — &amp;lt;i&amp;gt;это именно то, что система контроля версий должна позволять вам делать&amp;lt;/i&amp;gt;.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
С переходом на Mercurial, вы можете даже не осознать этого, но ветвление снова станет возможным и вам не нужно будет ничего опасаться.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Это означает, что у вас могут быть командные репозитории, где небольшая команда программистов работает над новой фичей, и, когда все готово, сливает свои изменения в главный репозиторий. И &amp;lt;i&amp;gt;это работает&amp;lt;/i&amp;gt;!&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Это означает, что у вас могут быть репозитории для службы тестирования, где команда тестеров пробует новый код. Если он работает, то служба тестирования вносит изменения в центральный репозиторий, что, в свою очередь, означает, что в центральном репозитории всегда надежный протестированный код. И &amp;lt;i&amp;gt;это работает&amp;lt;/i&amp;gt;!&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Это означает, что вы можете проводить эксперименты в отдельных репозиториях, и, если эксперименты удачны, сливать изменения в главный репозиторий, а если неудачны, то просто выбрасывать их. И &amp;lt;i&amp;gt;это работает&amp;lt;/i&amp;gt;!&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;h5&amp;gt;И последнее большое концептуальное отличие&amp;lt;/h5&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Последнее важное концептуальное отличие между Subversion и Mercurial не такое уж и важное, но оно может поставить вас в неудобное положение, если вы не будете про него знать. Вот оно:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Subversion, по сути, система контроля изменений для &amp;lt;i&amp;gt;файлов&amp;lt;/i&amp;gt;, а в Mercurial контроль изменений применяется ко всему каталогу, включая все подкаталоги.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Главным образом, это проявляется так: в Subversion, если вы находитесь в подкаталоге и вносите свои изменения в репозиторий, то вносятся только изменения из этого подкаталога и всех его подкаталогов. Это может привести к тому, что вы забудете внести изменения из другого подкаталога. А в Mercurial все команды всегда применяются ко всему дереву каталогов. Если ваш код находится в &amp;lt;b&amp;gt;c:\code&amp;lt;/b&amp;gt;, то когда вы выполняете 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg commit&lt;/pre&gt;

&lt;p&gt;
, то можете находиться в &amp;lt;b&amp;gt;c:\code&amp;lt;/b&amp;gt; или &amp;lt;i&amp;gt;в любом подкаталоге&amp;lt;/i&amp;gt; — результат будет одним и тем же.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Это не так уж важно, но если вы привыкли иметь один гигантский репозиторий на всю компанию, в котором некоторые люди работают только с определенными подкаталогами, которые их касаются, то знайте, что это не самый лучший метод при работе с Mercurial. Вам лучше иметь много меньших по размеру репозиториев на каждый проект.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;h5&amp;gt;И напоследок…&amp;lt;/h5&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Теперь часть, где вы просто должны поверить мне на слово.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Mercurial лучше, чем Subversion.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Лучше, если работать над кодом в команде. Лучше, если работать над кодом в одиночку.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Просто &amp;lt;i&amp;gt;лучше&amp;lt;/i&amp;gt;.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
И, попомните мои слова, если вы поймете как работает Mercurial, и будете работать так, как работает Mercurial, и не будете бороться с этой системой, и не будете пытаться делать с Mercurial все так же, как делали в Subversion, а вместо этого научитесь работать так, как от вас ожидает Mercurial, то будете счастливы, успешны, упитаны и всегда сможете найти пульт от телевизора.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
И поначалу вас будет искушать мысль — я знаю, будет, — бросить Mercurial и вернуться к Subversion. Потому что будет странно, словно вы живете в чужой стране, и вас будет тянуть на родину, и вы будете придумывать всевозможные оправдания вроде того, что будете заявлять, что в Mercurial рабочие копии занимают слишком много места, что есть туфта, так как на самом деле они занимают меньше места, чем в Subversion. Это правда!&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
И затем вы вернетесь к Subversion, потому что вы пробовали делать ветки так же, как в Subversion, и запутались, и получилось не очень, потому что вы на самом деле должны были делать ветки как в Mercurial, клонируя репозитории, не пытаться делать так, как работало в Subversion, а научиться принятому в Mercurial способу, который, поверьте мне, &amp;lt;i&amp;gt;работает&amp;lt;/i&amp;gt;.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
И после этого вы попросите Джейкоба, или кто там у вас эквивалент Джейкоба в вашем офисе, дать вам шпаргалку «От Subversion к Mercurial», и вы потратите три месяца, думая, что 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg fetch&lt;/pre&gt;

&lt;p&gt;
 это как 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;svn up&lt;/pre&gt;

&lt;p&gt;
, не понимая, на самом деле, что делает 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg fetch&lt;/pre&gt;

&lt;p&gt;
, и однажды все пойдет не так, и вы будете винить Mercurial, хотя вам стоило бы винить себя за непонимание того, как работает Mercurial.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Я знаю, вы так и сделаете, потому что это то, что я сделал.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Не делайте ту же ошибку. Изучите Mercurial, доверьтесь ему, разберитесь, как делать все в его стиле, и вы продвинетесь на целое поколение в области систем контроля версий. Пока ваши конкуренты тратят неделю на разрешение конфликтов, которые возникли после того, как поставщик обновил библиотеку, вы напечатаете 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg merge&lt;/pre&gt;

&lt;p&gt;
 и скажете себе «О, боже, это круто, это просто сработало.» И Майк расслабится и поделится косячком с практикантами, и наступит весна, и молодежь из соседнего колледжа сменит пуховики на коротенькие надорванные футболки, и жизнь будет хороша.&amp;lt;br&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Продолжение здесь:&lt;/strong&gt;
&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_2._%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_mercurial&quot; class=&quot;wikilink1&quot; title=&quot;hg_init:часть_2._основы_mercurial&quot; data-wiki-id=&quot;hg_init:часть_2._основы_mercurial&quot;&gt;Hg Init: Часть 2. Основы Mercurial&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Hg Init: \u041f\u0435\u0440\u0435\u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 Subversion. \u0427\u0430\u0441\u0442\u044c 1.&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;hg_init\u043f\u0435\u0440\u0435\u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435_\u0434\u043b\u044f_\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439_subversion_\u0447\u0430\u0441\u0442\u044c_1&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;27-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_2._%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_mercurial">
        <dc:format>text/html</dc:format>
        <dc:date>2016-02-16T15:01:10+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Основы Mercurial. Часть 2.</title>
        <link>http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_2._%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_mercurial</link>
        <description>&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:scm&amp;amp;do=showtag&amp;amp;tag=scm&quot; class=&quot;wikilink1&quot; title=&quot;tag:scm&quot; rel=&quot;tag&quot;&gt;scm&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:mercurial&amp;amp;do=showtag&amp;amp;tag=mercurial&quot; class=&quot;wikilink1&quot; title=&quot;tag:mercurial&quot; rel=&quot;tag&quot;&gt;mercurial&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:hg&amp;amp;do=showtag&amp;amp;tag=hg&quot; class=&quot;wikilink1&quot; title=&quot;tag:hg&quot; rel=&quot;tag&quot;&gt;hg&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;h1 class=&quot;sectionedit1&quot; id=&quot;основы_mercurial_часть_2&quot;&gt;Основы Mercurial. Часть 2.&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=70f295&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2Feebea7f1%2F5482efc4%2F01467053%2F55589e0f.png&quot; class=&quot;media&quot; title=&quot;http://habrastorage.org/storage/eebea7f1/5482efc4/01467053/55589e0f.png&quot;&gt;&lt;img src=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=70f295&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2Feebea7f1%2F5482efc4%2F01467053%2F55589e0f.png&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Это вторая часть из серии Hg Init: Учебное пособие по Mercurial от Джоэля Спольски (Joel Spolsky). Возможно, вы захотите прочитать и первую часть &lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_1._%D0%BF%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_subversion&quot; class=&quot;wikilink1&quot; title=&quot;hg_init:часть_1._переобучение_для_пользователей_subversion&quot; data-wiki-id=&quot;hg_init:часть_1._переобучение_для_пользователей_subversion&quot;&gt;Hg Init: Переобучение для пользователей Subversion. Часть 1.&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Даже если вы работаете в одиночку, то вам стоит использовать Mercurial. Так вы сможете получить все прелести контроля версий. Эта часть покажет насколько просто добавить каталог в Mercurial, чтобы с легкостью отслеживать предыдущие версии.
&lt;/p&gt;

&lt;p&gt;
Часть 2. Основы Mercurial
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=e0808d&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2Fa2dc0ced%2F1ebe349c%2Fadafba84%2Fcf7127dd.png&quot; class=&quot;media&quot; title=&quot;http://habrastorage.org/storage/a2dc0ced/1ebe349c/adafba84/cf7127dd.png&quot;&gt;&lt;img src=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=e0808d&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2Fa2dc0ced%2F1ebe349c%2Fadafba84%2Fcf7127dd.png&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Mercurial — это система контроля версий. Разработчики используют ее для администрирования исходного кода. У нее два основных назначения:
Она хранит все предыдущие версии каждого файла
Она может объединить разные версии вашего кода, то есть сотрудники могут независимо работать над кодом и затем объединять свои изменения
&lt;/p&gt;

&lt;p&gt;
Без Mercurial вы могли бы попытаться сохранить предыдущие версии, просто создавая много копий каталога с кодом:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=3d9cea&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2Fc204c8c2%2F8cbde270%2Ff057de30%2Fd4010d6d.png&quot; class=&quot;media&quot; title=&quot;http://habrastorage.org/storage/c204c8c2/8cbde270/f057de30/d4010d6d.png&quot;&gt;&lt;img src=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=3d9cea&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2Fc204c8c2%2F8cbde270%2Ff057de30%2Fd4010d6d.png&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Это муторно, требует много места на диске и создает путаницу. Лучше использовать систему контроля версий.
&lt;/p&gt;

&lt;p&gt;
Большинство людей работают с Mercurial через интерфейс командной строки. Так можно работать в Windows, Unix, и Mac. Команда для Mercurial — это hg:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=dc678e&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2Fd1a7ded2%2F0e111d9f%2Fff11aa6a%2F06d714d8.png&quot; class=&quot;media&quot; title=&quot;http://habrastorage.org/storage/d1a7ded2/0e111d9f/ff11aa6a/06d714d8.png&quot;&gt;&lt;img src=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=dc678e&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2Fd1a7ded2%2F0e111d9f%2Fff11aa6a%2F06d714d8.png&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Если выполнить hg без параметров, то вы получите список наиболее часто используемых команд. Вы можете также попробовать выполнить hg help для получения полного списка команд.
&lt;/p&gt;

&lt;p&gt;
Для того чтобы воспользоваться преимуществами контроля версий, вам нужен репозиторий. Репозиторий хранит все предыдущие версии всех ваших файлов. На самом деле, для экономии места на диске, все предыдущие версии не будут храниться — будет храниться только компактный список изменений.
&lt;/p&gt;

&lt;p&gt;
В старые времена заиметь репозиторий было большим делом. Вам было необходимо иметь центральный сервер и нужно было установить на него программное обеспечение. Mercurial — распределенная система, так что вы можете использовать ее без модного центрального сервера. Вы можете пользоваться Mercurial, используя один только свой компьютер. А заполучить репозиторий супер просто: вы просто идете в каталог с вашим кодом…
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=2fe208&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2Fdf024955%2F0a7c68ad%2F4d8a48b9%2F032e8174.png&quot; class=&quot;media&quot; title=&quot;http://habrastorage.org/storage/df024955/0a7c68ad/4d8a48b9/032e8174.png&quot;&gt;&lt;img src=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=2fe208&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2Fdf024955%2F0a7c68ad%2F4d8a48b9%2F032e8174.png&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
… и выполняете команду hg init:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=daff7a&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2F6d17bad7%2F1023e58b%2Fcbf778f1%2Fde0f8775.pn&quot; class=&quot;media mediafile mf_pn&quot; title=&quot;http://habrastorage.org/storage/6d17bad7/1023e58b/cbf778f1/de0f8775.pn&quot;&gt;de0f8775.pn&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
hg init
создает репозиторий.
&lt;/p&gt;

&lt;p&gt;
Минуточку, а разве что-то произошло? Выглядит так, словно ничего не поменялось. Нет, если вы присмотритесь получше, то увидите, что появился новый каталог .hg:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=b3df5e&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2F8f6b4eec%2Fb4aa6daf%2Fc822a60f%2Fea555032.png&quot; class=&quot;media&quot; title=&quot;http://habrastorage.org/storage/8f6b4eec/b4aa6daf/c822a60f/ea555032.png&quot;&gt;&lt;img src=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=b3df5e&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2F8f6b4eec%2Fb4aa6daf%2Fc822a60f%2Fea555032.png&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Это и есть репозиторий! Это каталог со всем, что нужно Mercurial для работы. Настройки, предыдущие версии файлов, теги, лишняя пара носков на случай дождя, и прочее. Не лазьте туда. Вам почти всегда не стоит возиться с этим каталогом самостоятельно.
&lt;/p&gt;

&lt;p&gt;
Ну хорошо, раз у нас теперь есть свежеиспеченный репозиторий, то мы захотим добавить в него все исходные файлы. Это тоже просто: нужно лишь выполнить hg add.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=ed2180&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2F0deb8fc5%2Fd3543931%2F6114cd9a%2Ff166b892.png&quot; class=&quot;media&quot; title=&quot;http://habrastorage.org/storage/0deb8fc5/d3543931/6114cd9a/f166b892.png&quot;&gt;&lt;img src=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=ed2180&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2F0deb8fc5%2Fd3543931%2F6114cd9a%2Ff166b892.png&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
hg add
помечает файлы как запланированные для добавления в репозиторий. Файлы на самом деле не будут добавлены до тех пор, пока вы не зафиксируете изменения.
&lt;/p&gt;

&lt;p&gt;
Остался еще один шаг… вам нужно зафиксировать ваши изменения. Какие изменения? Факт добавления всех этих файлов.
&lt;/p&gt;

&lt;p&gt;
Почему вы вынуждены фиксировать изменения? При работе с Mercurial фиксирование изменений означает: «Эй, вот как файлы сейчас выглядят, так их и запомни, пожалуйста». Это как создание копии всего каталога… каждый раз, когда у вас есть что-то измененное, и оно вам типа нравится, то вы фиксируете изменения.
&lt;/p&gt;

&lt;p&gt;
hg commit
сохраняет текущее состояние всех файлов в репозиторий.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=11f382&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2F1b0b9bd3%2F265a2c06%2F84473f38%2F64028691.png&quot; class=&quot;media&quot; title=&quot;http://habrastorage.org/storage/1b0b9bd3/265a2c06/84473f38/64028691.png&quot;&gt;&lt;img src=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=11f382&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2F1b0b9bd3%2F265a2c06%2F84473f38%2F64028691.png&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Mercurial запустит редактор для того, чтобы вы могли напечатать комментарий к изменениям. Вам нужно просто написать что-нибудь, что напомнит вам о сделанных изменениях.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=fa6af3&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2Fd47213d9%2Feab868b9%2F894d01ae%2F68290364.png&quot; class=&quot;media&quot; title=&quot;http://habrastorage.org/storage/d47213d9/eab868b9/894d01ae/68290364.png&quot;&gt;&lt;img src=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=fa6af3&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2Fd47213d9%2Feab868b9%2F894d01ae%2F68290364.png&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
После сохранения и выхода из редактора ваши изменения будут зафиксированы.
&lt;/p&gt;

&lt;p&gt;
Вы можете выполнить hg log для просмотра истории изменений. Это как блог для вашего репозитория:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=776dd3&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2F63c37c68%2F7c4b9074%2F79365c85%2F9158e135.png&quot; class=&quot;media&quot; title=&quot;http://habrastorage.org/storage/63c37c68/7c4b9074/79365c85/9158e135.png&quot;&gt;&lt;img src=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=776dd3&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2F63c37c68%2F7c4b9074%2F79365c85%2F9158e135.png&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
hg log
отображает историю изменений, зафиксированных в репозитории.
&lt;/p&gt;

&lt;p&gt;
Давайте изменим файл и посмотрим, что получится.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=5e3570&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2Fa4976b63%2Fe1120125%2Ff2d75af8%2F175793cf.png&quot; class=&quot;media&quot; title=&quot;http://habrastorage.org/storage/a4976b63/e1120125/f2d75af8/175793cf.png&quot;&gt;&lt;img src=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=5e3570&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2Fa4976b63%2Fe1120125%2Ff2d75af8%2F175793cf.png&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Так как мы сделали изменение, то можем его зафиксировать при помощи hg commit:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=11f382&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2F1b0b9bd3%2F265a2c06%2F84473f38%2F64028691.png&quot; class=&quot;media&quot; title=&quot;http://habrastorage.org/storage/1b0b9bd3/265a2c06/84473f38/64028691.png&quot;&gt;&lt;img src=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=11f382&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2F1b0b9bd3%2F265a2c06%2F84473f38%2F64028691.png&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Обратите внимание, что Mercurial догадался, что только один файл, a.txt, изменен:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=b9d4f3&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2F7e7e4f7c%2F44a2a982%2F429514a6%2Fea1f8d40.png&quot; class=&quot;media&quot; title=&quot;http://habrastorage.org/storage/7e7e4f7c/44a2a982/429514a6/ea1f8d40.png&quot;&gt;&lt;img src=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=b9d4f3&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2F7e7e4f7c%2F44a2a982%2F429514a6%2Fea1f8d40.png&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
А теперь, после того как я закоммитил (зафиксировал изменения), давайте посмотрим на историю:
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=9d7862&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2F30655b31%2Fb8a4769b%2Fcabb993c%2Fcd4bad09.png&quot; class=&quot;media&quot; title=&quot;http://habrastorage.org/storage/30655b31/b8a4769b/cabb993c/cd4bad09.png&quot;&gt;&lt;img src=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=9d7862&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2F30655b31%2Fb8a4769b%2Fcabb993c%2Fcd4bad09.png&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Как любой нынешний блоггер, Mercurial помещает самое новое в начало.
&lt;/p&gt;

&lt;p&gt;
Я собираюсь сделать еще одно изменение, просто чтобы потешить себя.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=9f1cd8&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2Fce916884%2F653f2957%2F8d61c6eb%2Fdaeab3db.png&quot; class=&quot;media&quot; title=&quot;http://habrastorage.org/storage/ce916884/653f2957/8d61c6eb/daeab3db.png&quot;&gt;&lt;img src=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=9f1cd8&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2Fce916884%2F653f2957%2F8d61c6eb%2Fdaeab3db.png&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Коммичу (фиксирую изменения):
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=11f382&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2F1b0b9bd3%2F265a2c06%2F84473f38%2F64028691.png&quot; class=&quot;media&quot; title=&quot;http://habrastorage.org/storage/1b0b9bd3/265a2c06/84473f38/64028691.png&quot;&gt;&lt;img src=&quot;http://178.140.10.58:8080/lib/exe/fetch.php?tok=11f382&amp;amp;media=http%3A%2F%2Fhabrastorage.org%2Fstorage%2F1b0b9bd3%2F265a2c06%2F84473f38%2F64028691.png&quot; class=&quot;media&quot; loading=&quot;lazy&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Мое сообщение к коммиту:
&lt;/p&gt;

&lt;p&gt;
А что у нас теперь в истории?
&lt;/p&gt;

&lt;p&gt;
Хорошо, это было весело. Я сделал несколько изменений и каждый раз, сделав значимое изменение, я фиксировал его в репозитории.
&lt;/p&gt;

&lt;p&gt;
Я знаю, вы сейчас думаете: «ДЖОЭЛЬ, ВСЕ ЭТО ВЫГЛЯДИТ ПУСТОЙ ТРАТОЙ ВРЕМЕНИ». К чему вся эта катавасия с коммитами?
&lt;/p&gt;

&lt;p&gt;
Терпение, мой юный друг. Ты вот-вот узнаешь, как извлечь выгоду из всего этого.
&lt;/p&gt;

&lt;p&gt;
Для начала: скажем, вы сделали большую ошибку в процессе редактирования.
&lt;/p&gt;

&lt;p&gt;
А затем, боже ж мой, в дополнение ко всему вы удалили пару очень важных файлов.
&lt;/p&gt;

&lt;p&gt;
Во времена, когда не было Mercurial, это все могло бы стать неплохим поводом для похода к системному администратору. Там, со слезами на глазах, вы бы задали ему пронзительно грустный вопрос: «Почему система резервного копирования „временно“ не работает все последние восемь месяцев».
&lt;/p&gt;

&lt;p&gt;
Системный администратор, которого все зовут Тако, слишком скромен и не обедает с остальной командой. В тех редких случаях, когда он не сидит в своем кресле на колесиках, можно увидеть треугольное пятно цвета сальсы там, где падали, пролетев между ног, капли от его мексиканских закусок. Эти капли гарантируют, что никто не возьмет его кресло, хотя это одно из превосходных кресел от Herman Miller, купленных учредителями компании для себя любимых, а не обычное бюджетное офисное нечто, из-за которого у всех болят спины.
&lt;/p&gt;

&lt;p&gt;
В любом случае, резервной копии нет, ага.
&lt;/p&gt;

&lt;p&gt;
Благодаря Mercurial, если вам не нравится то, что вы сделали, вы можете выполнить удобную команду hg revert, которая немедленно вернет ваш каталог к виду, в котором он был в момент последнего коммита.
&lt;/p&gt;

&lt;p&gt;
hg revert
возвращает измененные файлы к зафиксированному в репозитории виду.
&lt;/p&gt;

&lt;p&gt;
Я использовал аргумент –all, потому что хотел вернуть все файлы к прежнему состоянию.
&lt;/p&gt;

&lt;p&gt;
Таким образом, когда вы работаете над исходным кодом, используя Mercurial, вы:
Делаете изменения
Оцениваете, подходят ли они
Если подходят, то выполняете commit
Если не подходят, то выполняете revert
GOTO 1
&lt;/p&gt;

&lt;p&gt;
(Я знаю. Пользуюсь командной строкой, в Windows, да еще и оператором GOTO — я самый стрёмный программер из всех, когда-либо живших.)
&lt;/p&gt;

&lt;p&gt;
Со временем вы можете забыть, на чем остановились и что поменяли с момента прошлого коммита. Mercurial отслеживает все это для вас. Все что вам нужно, это выполнить hg status и Mercurial даст вам список измененных файлов.
&lt;/p&gt;

&lt;p&gt;
hg status
отображает список измененных файлов.
&lt;/p&gt;

&lt;p&gt;
Предположим, я создал один файл, отредактировал другой и удалил третий.
&lt;/p&gt;

&lt;p&gt;
hg status отображает список измененных файлов, добавляя значок в начале каждой строки. Этот значок сообщает о том, что же произошло. «M» означаете «Modified» — файл был изменен. &amp;quot;!&amp;quot; означает отсутствие — файл должен быть здесь, но куда-то делся. &amp;quot;?&amp;quot; означает что, состояние не определено — Mercurial ничего не знает про этот файл. Пока не знает.
&lt;/p&gt;

&lt;p&gt;
Давайте разбираться с изменениями поочередно. Вот что поменялось в файле a.txt? Вы ведь можете забыть, что изменили. Чёрт, да я едва помню что я обычно ем на завтрак. А особенно внушает опасения то, что это всегда хрустящие колечки CHEERIOS. В любом случае, a.txt изменен. Что поменялось?
&lt;/p&gt;

&lt;p&gt;
А есть команда для этого: hg diff сообщит вам в точности, что произошло с файлом с прошлого коммита.
&lt;/p&gt;

&lt;p&gt;
hg diff
показывает, что изменилось в файле.
&lt;/p&gt;

&lt;p&gt;
Формат результата немного непонятный, но самое важное, что вы можете видеть строки, начинающиеся с минуса (это то, что было удалено), и строки, начинающиеся с плюса (это то, что добавлено). Таким образом, вы можете видеть, что «Normal people» было заменено на «Civilians».
&lt;/p&gt;

&lt;p&gt;
Теперь про тот пропавший файл favicon.ico. Как уже было сказано, если вы на самом деле не планировали его удалять, то можете выполнить команду hg revert для восстановления. Но, предположим, что вы на самом деле хотели его удалить. При каждом удалении (или добавлении) файла вы обязаны сообщить об этом событии Mercurial.
&lt;/p&gt;

&lt;p&gt;
hg remove
помечает файлы как запланированные для удаления из репозитория. Файлы на диске не будут удалены до тех пор, пока вы не зафиксируете изменения.
&lt;/p&gt;

&lt;p&gt;
«R» означает «Removed», то есть, помечен для удаления. Во время следующего коммита Mercurial удалит этот файл. (История для этого файла сохранится в репозитории, так что, конечно, мы всегда сможем получить его назад.) И, наконец, нужно добавить этот новый файл b.txt:
&lt;/p&gt;

&lt;p&gt;
«A» означает «Added», то есть, помечен для добавления. Заметили, что я разленился писать hg status каждый раз? Для Mercurial достаточно минимального набора букв, однозначно определяющего команду, а на st начинается только одна команда.
&lt;/p&gt;

&lt;p&gt;
Разобравшись с вопросиками и восклицательными знаками, я могу продолжить и внести изменения:
&lt;/p&gt;

&lt;p&gt;
На что еще стоит обратить внимание в выводе hg log: строка changeset отображает номер каждого коммита. На самом деле даже два номера: короткий удобный вроде «0» для первой ревизии и длинный непонятный шестнадцатеричный, на который вы можете пока не обращать внимания.
&lt;/p&gt;

&lt;p&gt;
Запомните, что Mercurial хранит в репозитории достаточно информации для воссоздания любой версии любого файла.
&lt;/p&gt;

&lt;p&gt;
Прежде всего, при помощи простой команды hg cat вы можете вывести содержимое любой версии любого файла в консоль. К примеру, вот как увидеть, что сейчас находится в файле a.txt:
&lt;/p&gt;

&lt;p&gt;
hg cat
отображает содержимое любого файла для любой ревизии.
&lt;/p&gt;

&lt;p&gt;
Для того чтобы увидеть как файл выглядел раньше, я могу просто указать нужный номер набора изменений (changeset из лога) при помощи аргумента -r («revision», то есть ревизия):
&lt;/p&gt;

&lt;p&gt;
Если у файла сложное содержимое или большая длина, а изменился он лишь немного, то я могу использовать команду hg diff с аргументом r для вывода разницы между двумя ревизиями. К примеру, вот как посмотреть разницу между ревизиями 0 и 1:
&lt;/p&gt;

&lt;p&gt;
И наконец,- надеюсь, что вы еще не свалились от усталости,- прежде чем закончить эту часть, я хочу показать вам еще одну маленькую фишку: при помощи команды hg update вы можете перемещаться вперед и назад ко времени создания любой ревизии. Ну, по сути в будущее вы перемещаться не сможете, хотя это было бы супер круто, да. Вы, имея всего четыре ревизии, смогли бы выполнить hg update -r 103994 и получить реально крутую версию ваших исходников. С гравицапой и прочими футуристическими штучками. Но, конечно, это невозможно.
&lt;/p&gt;

&lt;p&gt;
Что на самом деле возможно, так это вернуться к любой ревизии. Следите за руками:
&lt;/p&gt;

&lt;p&gt;
hg update
приводит рабочий каталог к состоянию, как у заданной ревизии.
&lt;/p&gt;

&lt;p&gt;
Фактически, для перемещении вперед и назад между ревизиями hg update вносит в файлы запомненные изменения. Если файл был добавлен или удален, то эта команда добавляет или удаляет его на диске. Выполнение hg update без дополнительных параметров приводит рабочий каталог к состоянию как у самой свежей ревизии.
&lt;/p&gt;

&lt;p&gt;
Проверь себя
&lt;/p&gt;

&lt;p&gt;
Отлично! Эта часть закончена. Вот все, что вы должны уметь делать на данный момент:
Создать репозиторий
Добавить или удалить файлы из репозитория
После внесения изменений просмотреть, что было сделано, а затем
… зафиксировать изменения, если они вам нравятся
… или откатить изменения, если не нравятся
Просмотреть предыдущие версии файлов или привести рабочий каталог к состоянию как у некоторой ревизии.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Продолжение здесь:&lt;/strong&gt;
&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_3._%D0%BF%D1%80%D0%B8%D0%B2%D1%8B%D0%BA%D0%B0%D0%B5%D0%BC_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%82%D1%8C_%D0%B2_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B5&quot; class=&quot;wikilink1&quot; title=&quot;hg_init:часть_3._привыкаем_работать_в_команде&quot; data-wiki-id=&quot;hg_init:часть_3._привыкаем_работать_в_команде&quot;&gt;Hg Init: Часть 3. Привыкаем работать в команде&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041e\u0441\u043d\u043e\u0432\u044b Mercurial. \u0427\u0430\u0441\u0442\u044c 2.&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043e\u0441\u043d\u043e\u0432\u044b_mercurial_\u0447\u0430\u0441\u0442\u044c_2&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;27-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_3._%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_mercurial">
        <dc:format>text/html</dc:format>
        <dc:date>2011-10-10T15:13:46+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Hg Init: Часть 3. Привыкаем работать в команде</title>
        <link>http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_3._%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_mercurial</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;hg_initчасть_3_привыкаем_работать_в_команде&quot;&gt;Hg Init: Часть 3. Привыкаем работать в команде&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&amp;lt;html&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;    &amp;lt;img src=&amp;quot;http://habrastorage.org/storage/eebea7f1/5482efc4/01467053/55589e0f.png&amp;quot; align=&amp;quot;left&amp;quot;&amp;gt;Это третья часть из серии &amp;lt;b&amp;gt;Hg Init: Учебное пособие по Mercurial&amp;lt;/b&amp;gt; от Джоэля Спольски (&amp;lt;a href=&amp;quot;http://www.joelonsoftware.com/&amp;quot;&amp;gt;Joel Spolsky&amp;lt;/a&amp;gt;). Предыдущие части:&amp;lt;br&amp;gt;&lt;/pre&gt;

&lt;p&gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&lt;a href=&quot;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_1._%D0%BF%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_subversion&quot; class=&quot;urlextern&quot; title=&quot;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_1._%D0%BF%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_subversion&quot; rel=&quot;ugc nofollow&quot;&gt;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_1._%D0%BF%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_subversion&lt;/a&gt;&amp;quot;&amp;gt;«Переобучение для пользователей Subversion»&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&lt;a href=&quot;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_2._%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_mercurial&quot; class=&quot;urlextern&quot; title=&quot;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_2._%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_mercurial&quot; rel=&quot;ugc nofollow&quot;&gt;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_2._%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_mercurial&lt;/a&gt;&amp;quot;&amp;gt;«Основы Mercurial»&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Одно из преимуществ использования Mercurial — возможность работать командой над одним кодом. Mercurial позволяет каждому работать независимо и помогает объединять сделанные изменения.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;h4&amp;gt;Часть 3. Привыкаем работать в команде&amp;lt;/h4&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/7b7801cf/49b2fd7d/6d606de3/1c97bbd1.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/7b7801cf/49b2fd7d/6d606de3/1c97bbd1.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/7b7801cf/49b2fd7d/6d606de3/1c97bbd1.png&lt;/a&gt;&amp;quot; align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
При командной работе с Mercurial общепринято настраивать центральный репозиторий в дополнение к личным репозиториям, расположенным на компьютерах членов команды. Центральный репозиторий можно рассматривать как своего рода блошиный рынок, то есть, как место где встречаются и обмениваются сделанным.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;a name=&amp;quot;habracut&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/32a5f305/c4895d33/2f30d931/4210364d.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/32a5f305/c4895d33/2f30d931/4210364d.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/32a5f305/c4895d33/2f30d931/4210364d.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Проще всего создать центральный репозиторий при помощи встроенного в Mercurial веб-сервера. Вам нужно лишь создать репозиторий при помощи 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg init&lt;/pre&gt;

&lt;p&gt;
 и открыть к нему доступ при помощи 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg serve&lt;/pre&gt;

&lt;p&gt;
. По умолчанию репозиторий будет доступен на 8000-ом порту.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/1918f1bf/d865dae0/d4966f24/12e8fe35.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/1918f1bf/d865dae0/d4966f24/12e8fe35.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/1918f1bf/d865dae0/d4966f24/12e8fe35.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;blockquote&amp;gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg serve&lt;/pre&gt;

&lt;p&gt;
&amp;lt;br&amp;gt;
запускает веб-сервер и делает текущий репозиторий доступным в сети Интернет.&amp;lt;br&amp;gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Так как сервер запущен на компьютере &amp;lt;b&amp;gt;joel.example.com&amp;lt;/b&amp;gt;, то я могу просто открыть &amp;lt;b&amp;gt;joel.example.com:8000&amp;lt;/b&amp;gt; в браузере и увидеть, что сервер работает, правда репозиторий абсолютно пуст.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/0140b8e0/896882e3/4baa6617/d1a267f3.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/0140b8e0/896882e3/4baa6617/d1a267f3.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/0140b8e0/896882e3/4baa6617/d1a267f3.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Имея запущенный центральный веб-сервер, я могу &amp;lt;i&amp;gt;склонировать&amp;lt;/i&amp;gt; центральный репозиторий &amp;lt;i&amp;gt;с сервера на мой компьютер&amp;lt;/i&amp;gt; для личного пользования. Репозиторий в данный момент пуст, значит, я получу еще один пустой репозиторий в результате клонирования.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/2c740a45/4fabec98/c98fcb7a/92f422c6.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/2c740a45/4fabec98/c98fcb7a/92f422c6.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/2c740a45/4fabec98/c98fcb7a/92f422c6.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;blockquote&amp;gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg clone&lt;/pre&gt;

&lt;p&gt;
&amp;lt;br&amp;gt;
делает полную копию всего репозитория.&amp;lt;br&amp;gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Теперь я создам файл &amp;lt;b&amp;gt;guac&amp;lt;/b&amp;gt;, в котором запишу мой знаменитый рецепт &amp;lt;a href=&amp;quot;&lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%93%D1%83%D0%B0%D0%BA%D0%B0%D0%BC%D0%BE%D0%BB%D0%B5&quot; class=&quot;urlextern&quot; title=&quot;http://ru.wikipedia.org/wiki/%D0%93%D1%83%D0%B0%D0%BA%D0%B0%D0%BC%D0%BE%D0%BB%D0%B5&quot; rel=&quot;ugc nofollow&quot;&gt;http://ru.wikipedia.org/wiki/%D0%93%D1%83%D0%B0%D0%BA%D0%B0%D0%BC%D0%BE%D0%BB%D0%B5&lt;/a&gt;&amp;quot;&amp;gt;гуакамоле&amp;lt;/a&amp;gt;.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/4aff84ff/486ba60c/9057e021/c0035b15.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/4aff84ff/486ba60c/9057e021/c0035b15.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/4aff84ff/486ba60c/9057e021/c0035b15.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Я добавлю и закоммичу этот файл в репозиторий. Это будет первая официальная версия:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/44d3a55b/e0d4e124/e42c1cf7/cf3b7c31.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/44d3a55b/e0d4e124/e42c1cf7/cf3b7c31.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/44d3a55b/e0d4e124/e42c1cf7/cf3b7c31.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Напишу комментарий к коммиту:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/89a503a1/b5c6d82d/6c6b4193/13248894.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/89a503a1/b5c6d82d/6c6b4193/13248894.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/89a503a1/b5c6d82d/6c6b4193/13248894.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Я быстренько отредактирую файл, сделав одно небольшое изменение, для того, чтобы у нас было хоть немного истории изменений в репозитории.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/deaba090/1260460f/410b04a4/5167fd72.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/deaba090/1260460f/410b04a4/5167fd72.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/deaba090/1260460f/410b04a4/5167fd72.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
И зафиксирую изменения:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/233f2aa8/8318239c/90025c61/b72bd994.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/233f2aa8/8318239c/90025c61/b72bd994.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/233f2aa8/8318239c/90025c61/b72bd994.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Обратите внимание, что когда я коммитил в этот раз, то использовал аргумент 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;-m&lt;/pre&gt;

&lt;p&gt;
, чего раньше не делал. Это просто для того, чтобы указать комментарий к коммиту в командной строке и не использовать редактор.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Хорошо, что у нас есть? К настоящему времени у меня есть центральный репозиторий и мой персональный клон этого репозитория. Я сделал два изменения и зафиксировал их, но эти изменения хранятся в моем клоне. В центральном репозитории их пока нет. Так что все выглядит так:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/24badfd6/f67bd275/c3ddb80b/26b09b8b.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/24badfd6/f67bd275/c3ddb80b/26b09b8b.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/24badfd6/f67bd275/c3ddb80b/26b09b8b.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
А сейчас я воспользуюсь командой 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg push&lt;/pre&gt;

&lt;p&gt;
, которая протолкнет мои изменения из локального в центральный репозиторий:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;blockquote&amp;gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg push&lt;/pre&gt;

&lt;p&gt;
&amp;lt;br&amp;gt;
проталкивает свежие изменения из текущего репозитория в центральный.&amp;lt;br&amp;gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/5a06d34f/2bc320d7/b153b069/e629a0db.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/5a06d34f/2bc320d7/b153b069/e629a0db.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/5a06d34f/2bc320d7/b153b069/e629a0db.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Ну, отлично. Ясно видно, что так не сработает. Не хочу думать о безопасности и последствиях запуска какого-то веб-сервера с разрешением всем и каждому проталкивать в него свои тупые изменения. Потерпите немного, я собираюсь настроить сервер так, чтобы он разрешал делать всем что угодно. Нужно отредактировать файл .hg\hgrc на сервере:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/36e5b657/454f8d10/28fb9c5f/d8f05740.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/36e5b657/454f8d10/28fb9c5f/d8f05740.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/36e5b657/454f8d10/28fb9c5f/d8f05740.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Не стоит и говорить, что это небезопасно. Но если вы в защищенной локальной сети на работе, и у вас есть хороший файрвол, и вы доверяете всем в своей сети, то так вполне можно сделать. В противном случае вам стоит почитать о настройках безопасности.&amp;lt;br&amp;gt;
 &amp;lt;br&amp;gt;
Хорошо, пора вновь запустить сервер:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/105523b5/59e1b4bf/6342c521/267d945e.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/105523b5/59e1b4bf/6342c521/267d945e.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/105523b5/59e1b4bf/6342c521/267d945e.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Теперь у меня должно получиться протолкнуть изменения:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/a2b9811f/4badc381/b95e5697/f5eb54c8.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/a2b9811f/4badc381/b95e5697/f5eb54c8.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/a2b9811f/4badc381/b95e5697/f5eb54c8.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Ага! Теперь все выглядит так:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/4dbad5c0/8258e140/798f5ae3/e02b095c.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/4dbad5c0/8258e140/798f5ae3/e02b095c.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/4dbad5c0/8258e140/798f5ae3/e02b095c.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Я знаю, о чем вы думаете. Вы думаете: «Господи, Джоэль, это все странно. Почему в репозиториях лежат &amp;lt;i&amp;gt;изменения&amp;lt;/i&amp;gt;, а &amp;lt;i&amp;gt;не файлы&amp;lt;/i&amp;gt;? Где тот файлик &amp;lt;b&amp;gt;guac&amp;lt;/b&amp;gt;?».&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Ну да, странно. Но так уж работает распределенный контроль версий. Репозитории просто хранят большие стопки изменений. Представьте, что одно изменение — это как лист частично прозрачного материала. Если у вас есть пачка таких листов, и вы сложите их друг на дружку так, чтобы самое последнее изменение было сверху, а потом посмотрите на эту пачку сверху вниз, то — та-да-да-дам! — увидите текущую версию файла. Если по одному убирать листы с верха стопки, то вы будете видеть все более и более ранние версии файла.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Воспользуемся браузером и снова заглянем в центральный репозиторий:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/3c857027/d3fe2213/746c3e1a/bd26eb0f.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/3c857027/d3fe2213/746c3e1a/bd26eb0f.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/3c857027/d3fe2213/746c3e1a/bd26eb0f.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Там именно то, что ожидалось.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Теперь я позову Розу помочь мне в работе над рецептом. Роза из команды тестеров. Любой подтвердит, что она напоминает одну из тех бабулек, что можно увидеть в Вегасе, часами сидящих с отвисшей челюстью перед «одноруким бандитом» и бросающих монетку за монеткой в заветную щелку. Все отличие в том, что Роза программы тестирует. Вы можете подкинуть ей новую версию программы, и она проверит ее на 23 дистрибутивах Linux. Проверит по очереди на каждом. Не выказывая никаких эмоций, не делая лишних движений. Останавливаясь только для того, чтобы сообщить вам, что пропущена точка над i в турецкой версии Ubuntu Linux. Роза отлично тестирует, но, клянусь, иногда ведет себя как зомби.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/371530e4/00fbd7ce/85609735/4208ce7b.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/371530e4/00fbd7ce/85609735/4208ce7b.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/371530e4/00fbd7ce/85609735/4208ce7b.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Роза воспользовалась командой 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg clone&lt;/pre&gt;

&lt;p&gt;
 для создания своей собственной полной копии репозитория. 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg clone&lt;/pre&gt;

&lt;p&gt;
 принимает два аргумента: &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; репозитория и имя каталога, в который вы хотите склонировать. У Розы свой каталог &amp;lt;b&amp;gt;recipes&amp;lt;/b&amp;gt;.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/3750c07a/f5b90d1b/06d55bb2/ecd4d3a6.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/3750c07a/f5b90d1b/06d55bb2/ecd4d3a6.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/3750c07a/f5b90d1b/06d55bb2/ecd4d3a6.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Обратите внимание, что при выполнении 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg log&lt;/pre&gt;

&lt;p&gt;
 она видит всю историю. То есть Роза скачала весь репозиторий с полной историей всего, что уже произошло.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Сейчас Роза сделает изменение и внесет его в репозиторий:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/625ee93f/4abace04/4fa31409/85261f2d.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/625ee93f/4abace04/4fa31409/85261f2d.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/625ee93f/4abace04/4fa31409/85261f2d.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Вот, коммитит. Обратите внимание, что она может работать даже если сервер не работает: коммит полностью выполняется на ее машине. &amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/2326821c/0aa0eb4e/1b0ff6ad/985efcd6.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/2326821c/0aa0eb4e/1b0ff6ad/985efcd6.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/2326821c/0aa0eb4e/1b0ff6ad/985efcd6.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Пока Роза делала свои изменения, я тоже кое-что сделал.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/5e8ea447/72ead90e/263bba3f/8721f9eb.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/5e8ea447/72ead90e/263bba3f/8721f9eb.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/5e8ea447/72ead90e/263bba3f/8721f9eb.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
После того, как я зафиксирую свои изменения, станет видно, что в моем логе под номером два указано не то же, что у Розы.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/2dba88e3/6da5d0aa/a3bb4bd9/7b38c1e1.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/2dba88e3/6da5d0aa/a3bb4bd9/7b38c1e1.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/2dba88e3/6da5d0aa/a3bb4bd9/7b38c1e1.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Истории в наших репозиториях начали отличаться.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/a9c1352a/9d5dc961/99774de2/5ae54129.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/a9c1352a/9d5dc961/99774de2/5ae54129.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/a9c1352a/9d5dc961/99774de2/5ae54129.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Не переживайте, скоро увидим, как свести все эти изменения воедино для получения отменной вкусняшки с чипсами и &amp;lt;a href=&amp;quot;&lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%A5%D0%B0%D0%B1%D0%B0%D0%BD%D0%B5%D1%80%D0%BE&quot; class=&quot;urlextern&quot; title=&quot;http://ru.wikipedia.org/wiki/%D0%A5%D0%B0%D0%B1%D0%B0%D0%BD%D0%B5%D1%80%D0%BE&quot; rel=&quot;ugc nofollow&quot;&gt;http://ru.wikipedia.org/wiki/%D0%A5%D0%B0%D0%B1%D0%B0%D0%BD%D0%B5%D1%80%D0%BE&lt;/a&gt;&amp;quot;&amp;gt;перчиком хабанеро&amp;lt;/a&amp;gt;.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Роза может продолжать работать без подключения к серверу, делая сколько угодно изменений. Она может фиксировать или откатывать изменения в своем репозитории. Однако настанет момент, когда она решит поделиться своими изменениями с остальными. Она может выполнить команду 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg outgoing&lt;/pre&gt;

&lt;p&gt;
 и увидеть список изменений, ожидающих отправки в центральный репозиторий. Это те изменения, которые будут отправлены при выполнении 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg push&lt;/pre&gt;

&lt;p&gt;
.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/db449ef2/d6b61d93/156b0919/f19dd056.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/db449ef2/d6b61d93/156b0919/f19dd056.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/db449ef2/d6b61d93/156b0919/f19dd056.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;blockquote&amp;gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg outgoing&lt;/pre&gt;

&lt;p&gt;
&amp;lt;br&amp;gt;
отображает список изменений ждущих отправки в текущем репозитории.&amp;lt;br&amp;gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg outgoing&lt;/pre&gt;

&lt;p&gt;
 это просто список всех таких изменений в текущем репозитории, которых нет в центральном репозитории.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Хорошо, вот Роза проталкивает свои изменения в центральный репозиторий.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/7fce8e5d/56405199/c27ae4af/25722734.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/7fce8e5d/56405199/c27ae4af/25722734.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/7fce8e5d/56405199/c27ae4af/25722734.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
И теперь все выглядит так:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/28086fde/fee793f7/af840235/a9751709.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/28086fde/fee793f7/af840235/a9751709.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/28086fde/fee793f7/af840235/a9751709.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
После того, как я сходил выпить четвертую чашку &amp;lt;a href=&amp;quot;&lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%9B%D0%B0%D1%82%D1%82%D0%B5&quot; class=&quot;urlextern&quot; title=&quot;http://ru.wikipedia.org/wiki/%D0%9B%D0%B0%D1%82%D1%82%D0%B5&quot; rel=&quot;ugc nofollow&quot;&gt;http://ru.wikipedia.org/wiki/%D0%9B%D0%B0%D1%82%D1%82%D0%B5&lt;/a&gt;&amp;quot;&amp;gt;латте&amp;lt;/a&amp;gt; за сегодняшний день, я тоже готов протолкнуть мое изменение про картофельные чипсы.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/66211440/3bef48f3/e7d8fa43/4a17dfb5.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/66211440/3bef48f3/e7d8fa43/4a17dfb5.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/66211440/3bef48f3/e7d8fa43/4a17dfb5.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
ААААА!!! Ошибка! Да, кстати, видите сообщение? То, в котором написано &amp;lt;i&amp;gt;используйте ключ -f для принудительного проталкивания&amp;lt;/i&amp;gt; (use push -f to force)? Это &amp;lt;i&amp;gt;ужасный&amp;lt;/i&amp;gt; совет. Никогда и ни за что &amp;lt;b&amp;gt;не используйте ключ -f&amp;lt;/b&amp;gt;. Вы пожалеете о том, что использовали его. Просто поверьте мне в данный момент.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Причина, по которой у Розы получилось протолкнуть изменения, а у меня нет в том, что картофельный чипсы и гуакамоле плохо сочетаются. Шучу, шучу! Просто хотел удостовериться, что вы еще не уснули там.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Команда завершилась с ошибкой потому, что каждый из нас сделал изменения, а значит, их нужно слить вместе, и Mercurial знает об этом.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Первым делом я заберу все изменения из центрального репозитория, которых у меня еще нет, чтобы произвести слияние (merge).&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/cc14316f/6d00f829/c045eaff/b28a5dff.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/cc14316f/6d00f829/c045eaff/b28a5dff.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/cc14316f/6d00f829/c045eaff/b28a5dff.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Тут какая-то тарабарщина про +1 голову (+1 heads). Это потому, что мой репозиторий, в котором раньше были аккуратно уложены три изменения, стал двухголовым монстром. На вершине репозитория опасно расположены два разных изменения. Вот как это выглядит:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/d20fe311/841ec62a/25136b20/a75b2b3b.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/d20fe311/841ec62a/25136b20/a75b2b3b.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/d20fe311/841ec62a/25136b20/a75b2b3b.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
У меня в репозитории теперь обе версии. Вот моя:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/7727aca4/0638daad/bddcb9a2/1cb4c06e.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/7727aca4/0638daad/bddcb9a2/1cb4c06e.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/7727aca4/0638daad/bddcb9a2/1cb4c06e.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
А вот версия Розы:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/ccca055a/4385a92c/1b996f55/8e9755c9.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/ccca055a/4385a92c/1b996f55/8e9755c9.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/ccca055a/4385a92c/1b996f55/8e9755c9.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
И я должен слить эти версии воедино. К счастью, это просто:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/94ed4e43/6c8c1c1c/f34767ff/9825f25a.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/94ed4e43/6c8c1c1c/f34767ff/9825f25a.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/94ed4e43/6c8c1c1c/f34767ff/9825f25a.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Глядите-ка! Команда 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg merge&lt;/pre&gt;

&lt;p&gt;
 взяла и объединила обе мои «головы» (изменения на вершине репозитория) в одну. Так как в данном случае мы с Розой изменили разные части файла, то конфликтов при слиянии не было и все прошло без сучка без задоринки.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;blockquote&amp;gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg merge&lt;/pre&gt;

&lt;p&gt;
&amp;lt;br&amp;gt;
производит слияние (объединение) двух «голов».&amp;lt;br&amp;gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Мне по-прежнему надо сделать коммит. Это важно. Если бы слияние не удалось, то я всегда мог бы откатиться и попробовать снова. Но, так как слияние было успешным, то я сделаю коммит. После этого я смогу протолкнуть мои изменения в центральный репозиторий.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/2372798e/f0a49c6a/2f49a1ee/75085756.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/2372798e/f0a49c6a/2f49a1ee/75085756.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/2372798e/f0a49c6a/2f49a1ee/75085756.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Теперь в центральном репозитории то же, что в моем:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/3301ab87/9868c9ff/9bb6c7ea/acb0e87e.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/3301ab87/9868c9ff/9bb6c7ea/acb0e87e.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/3301ab87/9868c9ff/9bb6c7ea/acb0e87e.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Хорошо, у меня есть изменения Розы и мои собственные изменения, но у Розы пока нет моих изменений.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Есть еще один момент, связанный с Розой, о котором я забыл рассказать. Она — доктор. Ага, доктор, который врач. Ну не чудно? Она была главным педиатром в больнице &amp;lt;a href=&amp;quot;&lt;a href=&quot;http://www.mountsinai.org/&quot; class=&quot;urlextern&quot; title=&quot;http://www.mountsinai.org/&quot; rel=&quot;ugc nofollow&quot;&gt;http://www.mountsinai.org/&lt;/a&gt;&amp;quot;&amp;gt;Mt. Sinai&amp;lt;/a&amp;gt; и получала, наверное, «раз в пять больше, чем этот поганый укурок платит своим тестерам». Никто наверняка не знает, почему она оставила медицину. Остальные тестеры думают, что случилось что-то трагичное. Еще у нее семья была: на ее столе картинка милого десятилетнего ребенка. Но теперь она живет одна, и мы не хотим лезть ей в душу.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Розе нужно вытянуть (pull) свежие входящие изменения из репозитория, чтобы получить мои изменения.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/19f31f66/0a623177/f258cc66/5667615b.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/19f31f66/0a623177/f258cc66/5667615b.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/19f31f66/0a623177/f258cc66/5667615b.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Готово. Теперь, — вам может показаться это странным, — несмотря на то, что Роза втянула новые изменения в свой репозиторий, &amp;lt;i&amp;gt;эти изменения не находятся в ее рабочем каталоге&amp;lt;/i&amp;gt;.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/c8bc0274/0d8008f0/40c44b5b/b92c3101.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/c8bc0274/0d8008f0/40c44b5b/b92c3101.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/c8bc0274/0d8008f0/40c44b5b/b92c3101.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Видите, Она по-прежнему работает с &amp;lt;a href=&amp;quot;&lt;a href=&quot;http://en.wikipedia.org/wiki/Tortilla_chip&quot; class=&quot;urlextern&quot; title=&quot;http://en.wikipedia.org/wiki/Tortilla_chip&quot; rel=&quot;ugc nofollow&quot;&gt;http://en.wikipedia.org/wiki/Tortilla_chip&lt;/a&gt;&amp;quot;&amp;gt;кукурузными чипсами&amp;lt;/a&amp;gt;. С кукурузными чипсами!&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
У нее &amp;lt;i&amp;gt;есть&amp;lt;/i&amp;gt; мои последние изменения где-то в репозитории…&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/37e67e82/67a3e142/e9022010/4fd8cfde.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/37e67e82/67a3e142/e9022010/4fd8cfde.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/37e67e82/67a3e142/e9022010/4fd8cfde.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Просто мои изменения не в ее рабочем каталоге. Это потому, что она до сих пор изменяет второй набор изменений. Это можно увидеть, выполнив команду 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg parent&lt;/pre&gt;

&lt;p&gt;
:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/248c9d9e/b3027e43/dee45f23/6063a7e3.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/248c9d9e/b3027e43/dee45f23/6063a7e3.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/248c9d9e/b3027e43/dee45f23/6063a7e3.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;blockquote&amp;gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg parent&lt;/pre&gt;

&lt;p&gt;
&amp;lt;br&amp;gt;
отображает набор изменений, находящийся в рабочем каталоге.&amp;lt;br&amp;gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Mercurial добр к нам. Вытягивать изменения всегда безопасно. Все, что происходит — это получение свежих изменений, сделанных другими людьми. Мы можем начать работать с этими изменениями позже, когда нам удобно.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Запомните, что команда 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg up&lt;/pre&gt;

&lt;p&gt;
 без аргументов приведет рабочий каталог к «макушке» (tip), то есть применит все изменения до самого верхнего набора изменений. В данном случае, это четвертый набор изменений:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/06bd58a7/84eba403/73124798/54b38879.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/06bd58a7/84eba403/73124798/54b38879.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/06bd58a7/84eba403/73124798/54b38879.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Теперь Роза видит самую свежую версию с изменениями от обоих нас.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Когда вы работаете в команде, то рабочий процесс будет выглядеть во многом так:&amp;lt;br&amp;gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;Забрать свежую версию, с которой все работают, если вы давненько этого не делали, выполнив:&amp;lt;br&amp;gt;
 &amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;hg pull&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;hg up&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&amp;lt;br&amp;gt;
 &amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Внести изменения&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Зафиксировать изменения (локально)&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Повторить пункты 2-3 до тех пор, пока у вас не получится хороший код, который вы хотите вывалить на всех остальных&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Когда вы готовы поделиться, выполнить:&amp;lt;br&amp;gt;
 &amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;hg pull для получения чужих изменений (если есть)&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;hg merge для слияния этих изменений со своими&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;тестирование! для того, чтобы удостовериться, что при слиянии ничего не попортилось&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;hg commit (для фиксации результата слияния)&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;hg push&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&amp;lt;br&amp;gt;
 &amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;h5&amp;gt;Проверь себя&amp;lt;/h5&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Вот все, что вы должны уметь делать на данный момент:&amp;lt;br&amp;gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;Настроить центральный репозиторий и дать членам команды возможность делать его клоны&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Проталкивать изменения в центральный репозиторий&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Вытягивать изменения из центрального репозитория&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Делать слияние изменений от разных авторов&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Продолжение здесь:&lt;/strong&gt;
&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_4._%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B8&quot; class=&quot;wikilink1&quot; title=&quot;hg_init:часть_4._исправляем_ошибки&quot; data-wiki-id=&quot;hg_init:часть_4._исправляем_ошибки&quot;&gt;Часть 4. Исправляем ошибки&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
</description>
    </item>
    <item rdf:about="http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_3._%D0%BF%D1%80%D0%B8%D0%B2%D1%8B%D0%BA%D0%B0%D0%B5%D0%BC_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%82%D1%8C_%D0%B2_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B5">
        <dc:format>text/html</dc:format>
        <dc:date>2016-02-16T14:06:35+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Hg Init: Привыкаем работать в команде. Часть 3.</title>
        <link>http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_3._%D0%BF%D1%80%D0%B8%D0%B2%D1%8B%D0%BA%D0%B0%D0%B5%D0%BC_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%82%D1%8C_%D0%B2_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B5</link>
        <description>&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:scm&amp;amp;do=showtag&amp;amp;tag=scm&quot; class=&quot;wikilink1&quot; title=&quot;tag:scm&quot; rel=&quot;tag&quot;&gt;scm&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:mercurial&amp;amp;do=showtag&amp;amp;tag=mercurial&quot; class=&quot;wikilink1&quot; title=&quot;tag:mercurial&quot; rel=&quot;tag&quot;&gt;mercurial&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:hg&amp;amp;do=showtag&amp;amp;tag=hg&quot; class=&quot;wikilink1&quot; title=&quot;tag:hg&quot; rel=&quot;tag&quot;&gt;hg&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;h1 class=&quot;sectionedit1&quot; id=&quot;hg_initпривыкаем_работать_в_команде_часть_3&quot;&gt;Hg Init: Привыкаем работать в команде. Часть 3.&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&amp;lt;html&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;    &amp;lt;img src=&amp;quot;http://habrastorage.org/storage/eebea7f1/5482efc4/01467053/55589e0f.png&amp;quot; align=&amp;quot;left&amp;quot;&amp;gt;Это третья часть из серии &amp;lt;b&amp;gt;Hg Init: Учебное пособие по Mercurial&amp;lt;/b&amp;gt; от Джоэля Спольски (&amp;lt;a href=&amp;quot;http://www.joelonsoftware.com/&amp;quot;&amp;gt;Joel Spolsky&amp;lt;/a&amp;gt;). Предыдущие части:&amp;lt;br&amp;gt;&lt;/pre&gt;

&lt;p&gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&lt;a href=&quot;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_1._%D0%BF%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_subversion&quot; class=&quot;urlextern&quot; title=&quot;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_1._%D0%BF%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_subversion&quot; rel=&quot;ugc nofollow&quot;&gt;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_1._%D0%BF%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_subversion&lt;/a&gt;&amp;quot;&amp;gt;«Переобучение для пользователей Subversion»&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&lt;a href=&quot;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_2._%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_mercurial&quot; class=&quot;urlextern&quot; title=&quot;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_2._%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_mercurial&quot; rel=&quot;ugc nofollow&quot;&gt;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_2._%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_mercurial&lt;/a&gt;&amp;quot;&amp;gt;«Основы Mercurial»&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Одно из преимуществ использования Mercurial — возможность работать командой над одним кодом. Mercurial позволяет каждому работать независимо и помогает объединять сделанные изменения.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;h4&amp;gt;Часть 3. Привыкаем работать в команде&amp;lt;/h4&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/7b7801cf/49b2fd7d/6d606de3/1c97bbd1.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/7b7801cf/49b2fd7d/6d606de3/1c97bbd1.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/7b7801cf/49b2fd7d/6d606de3/1c97bbd1.png&lt;/a&gt;&amp;quot; align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
При командной работе с Mercurial общепринято настраивать центральный репозиторий в дополнение к личным репозиториям, расположенным на компьютерах членов команды. Центральный репозиторий можно рассматривать как своего рода блошиный рынок, то есть, как место где встречаются и обмениваются сделанным.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;a name=&amp;quot;habracut&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/32a5f305/c4895d33/2f30d931/4210364d.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/32a5f305/c4895d33/2f30d931/4210364d.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/32a5f305/c4895d33/2f30d931/4210364d.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Проще всего создать центральный репозиторий при помощи встроенного в Mercurial веб-сервера. Вам нужно лишь создать репозиторий при помощи 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg init&lt;/pre&gt;

&lt;p&gt;
 и открыть к нему доступ при помощи 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg serve&lt;/pre&gt;

&lt;p&gt;
. По умолчанию репозиторий будет доступен на 8000-ом порту.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/1918f1bf/d865dae0/d4966f24/12e8fe35.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/1918f1bf/d865dae0/d4966f24/12e8fe35.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/1918f1bf/d865dae0/d4966f24/12e8fe35.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;blockquote&amp;gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg serve&lt;/pre&gt;

&lt;p&gt;
&amp;lt;br&amp;gt;
запускает веб-сервер и делает текущий репозиторий доступным в сети Интернет.&amp;lt;br&amp;gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Так как сервер запущен на компьютере &amp;lt;b&amp;gt;joel.example.com&amp;lt;/b&amp;gt;, то я могу просто открыть &amp;lt;b&amp;gt;joel.example.com:8000&amp;lt;/b&amp;gt; в браузере и увидеть, что сервер работает, правда репозиторий абсолютно пуст.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/0140b8e0/896882e3/4baa6617/d1a267f3.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/0140b8e0/896882e3/4baa6617/d1a267f3.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/0140b8e0/896882e3/4baa6617/d1a267f3.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Имея запущенный центральный веб-сервер, я могу &amp;lt;i&amp;gt;склонировать&amp;lt;/i&amp;gt; центральный репозиторий &amp;lt;i&amp;gt;с сервера на мой компьютер&amp;lt;/i&amp;gt; для личного пользования. Репозиторий в данный момент пуст, значит, я получу еще один пустой репозиторий в результате клонирования.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/2c740a45/4fabec98/c98fcb7a/92f422c6.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/2c740a45/4fabec98/c98fcb7a/92f422c6.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/2c740a45/4fabec98/c98fcb7a/92f422c6.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;blockquote&amp;gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg clone&lt;/pre&gt;

&lt;p&gt;
&amp;lt;br&amp;gt;
делает полную копию всего репозитория.&amp;lt;br&amp;gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Теперь я создам файл &amp;lt;b&amp;gt;guac&amp;lt;/b&amp;gt;, в котором запишу мой знаменитый рецепт &amp;lt;a href=&amp;quot;&lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%93%D1%83%D0%B0%D0%BA%D0%B0%D0%BC%D0%BE%D0%BB%D0%B5&quot; class=&quot;urlextern&quot; title=&quot;http://ru.wikipedia.org/wiki/%D0%93%D1%83%D0%B0%D0%BA%D0%B0%D0%BC%D0%BE%D0%BB%D0%B5&quot; rel=&quot;ugc nofollow&quot;&gt;http://ru.wikipedia.org/wiki/%D0%93%D1%83%D0%B0%D0%BA%D0%B0%D0%BC%D0%BE%D0%BB%D0%B5&lt;/a&gt;&amp;quot;&amp;gt;гуакамоле&amp;lt;/a&amp;gt;.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/4aff84ff/486ba60c/9057e021/c0035b15.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/4aff84ff/486ba60c/9057e021/c0035b15.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/4aff84ff/486ba60c/9057e021/c0035b15.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Я добавлю и закоммичу этот файл в репозиторий. Это будет первая официальная версия:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/44d3a55b/e0d4e124/e42c1cf7/cf3b7c31.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/44d3a55b/e0d4e124/e42c1cf7/cf3b7c31.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/44d3a55b/e0d4e124/e42c1cf7/cf3b7c31.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Напишу комментарий к коммиту:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/89a503a1/b5c6d82d/6c6b4193/13248894.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/89a503a1/b5c6d82d/6c6b4193/13248894.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/89a503a1/b5c6d82d/6c6b4193/13248894.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Я быстренько отредактирую файл, сделав одно небольшое изменение, для того, чтобы у нас было хоть немного истории изменений в репозитории.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/deaba090/1260460f/410b04a4/5167fd72.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/deaba090/1260460f/410b04a4/5167fd72.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/deaba090/1260460f/410b04a4/5167fd72.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
И зафиксирую изменения:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/233f2aa8/8318239c/90025c61/b72bd994.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/233f2aa8/8318239c/90025c61/b72bd994.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/233f2aa8/8318239c/90025c61/b72bd994.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Обратите внимание, что когда я коммитил в этот раз, то использовал аргумент 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;-m&lt;/pre&gt;

&lt;p&gt;
, чего раньше не делал. Это просто для того, чтобы указать комментарий к коммиту в командной строке и не использовать редактор.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Хорошо, что у нас есть? К настоящему времени у меня есть центральный репозиторий и мой персональный клон этого репозитория. Я сделал два изменения и зафиксировал их, но эти изменения хранятся в моем клоне. В центральном репозитории их пока нет. Так что все выглядит так:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/24badfd6/f67bd275/c3ddb80b/26b09b8b.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/24badfd6/f67bd275/c3ddb80b/26b09b8b.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/24badfd6/f67bd275/c3ddb80b/26b09b8b.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
А сейчас я воспользуюсь командой 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg push&lt;/pre&gt;

&lt;p&gt;
, которая протолкнет мои изменения из локального в центральный репозиторий:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;blockquote&amp;gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg push&lt;/pre&gt;

&lt;p&gt;
&amp;lt;br&amp;gt;
проталкивает свежие изменения из текущего репозитория в центральный.&amp;lt;br&amp;gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/5a06d34f/2bc320d7/b153b069/e629a0db.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/5a06d34f/2bc320d7/b153b069/e629a0db.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/5a06d34f/2bc320d7/b153b069/e629a0db.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Ну, отлично. Ясно видно, что так не сработает. Не хочу думать о безопасности и последствиях запуска какого-то веб-сервера с разрешением всем и каждому проталкивать в него свои тупые изменения. Потерпите немного, я собираюсь настроить сервер так, чтобы он разрешал делать всем что угодно. Нужно отредактировать файл .hg\hgrc на сервере:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/36e5b657/454f8d10/28fb9c5f/d8f05740.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/36e5b657/454f8d10/28fb9c5f/d8f05740.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/36e5b657/454f8d10/28fb9c5f/d8f05740.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Не стоит и говорить, что это небезопасно. Но если вы в защищенной локальной сети на работе, и у вас есть хороший файрвол, и вы доверяете всем в своей сети, то так вполне можно сделать. В противном случае вам стоит почитать о настройках безопасности.&amp;lt;br&amp;gt;
 &amp;lt;br&amp;gt;
Хорошо, пора вновь запустить сервер:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/105523b5/59e1b4bf/6342c521/267d945e.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/105523b5/59e1b4bf/6342c521/267d945e.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/105523b5/59e1b4bf/6342c521/267d945e.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Теперь у меня должно получиться протолкнуть изменения:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/a2b9811f/4badc381/b95e5697/f5eb54c8.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/a2b9811f/4badc381/b95e5697/f5eb54c8.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/a2b9811f/4badc381/b95e5697/f5eb54c8.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Ага! Теперь все выглядит так:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/4dbad5c0/8258e140/798f5ae3/e02b095c.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/4dbad5c0/8258e140/798f5ae3/e02b095c.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/4dbad5c0/8258e140/798f5ae3/e02b095c.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Я знаю, о чем вы думаете. Вы думаете: «Господи, Джоэль, это все странно. Почему в репозиториях лежат &amp;lt;i&amp;gt;изменения&amp;lt;/i&amp;gt;, а &amp;lt;i&amp;gt;не файлы&amp;lt;/i&amp;gt;? Где тот файлик &amp;lt;b&amp;gt;guac&amp;lt;/b&amp;gt;?».&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Ну да, странно. Но так уж работает распределенный контроль версий. Репозитории просто хранят большие стопки изменений. Представьте, что одно изменение — это как лист частично прозрачного материала. Если у вас есть пачка таких листов, и вы сложите их друг на дружку так, чтобы самое последнее изменение было сверху, а потом посмотрите на эту пачку сверху вниз, то — та-да-да-дам! — увидите текущую версию файла. Если по одному убирать листы с верха стопки, то вы будете видеть все более и более ранние версии файла.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Воспользуемся браузером и снова заглянем в центральный репозиторий:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/3c857027/d3fe2213/746c3e1a/bd26eb0f.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/3c857027/d3fe2213/746c3e1a/bd26eb0f.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/3c857027/d3fe2213/746c3e1a/bd26eb0f.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Там именно то, что ожидалось.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Теперь я позову Розу помочь мне в работе над рецептом. Роза из команды тестеров. Любой подтвердит, что она напоминает одну из тех бабулек, что можно увидеть в Вегасе, часами сидящих с отвисшей челюстью перед «одноруким бандитом» и бросающих монетку за монеткой в заветную щелку. Все отличие в том, что Роза программы тестирует. Вы можете подкинуть ей новую версию программы, и она проверит ее на 23 дистрибутивах Linux. Проверит по очереди на каждом. Не выказывая никаких эмоций, не делая лишних движений. Останавливаясь только для того, чтобы сообщить вам, что пропущена точка над i в турецкой версии Ubuntu Linux. Роза отлично тестирует, но, клянусь, иногда ведет себя как зомби.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/371530e4/00fbd7ce/85609735/4208ce7b.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/371530e4/00fbd7ce/85609735/4208ce7b.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/371530e4/00fbd7ce/85609735/4208ce7b.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Роза воспользовалась командой 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg clone&lt;/pre&gt;

&lt;p&gt;
 для создания своей собственной полной копии репозитория. 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg clone&lt;/pre&gt;

&lt;p&gt;
 принимает два аргумента: &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt; репозитория и имя каталога, в который вы хотите склонировать. У Розы свой каталог &amp;lt;b&amp;gt;recipes&amp;lt;/b&amp;gt;.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/3750c07a/f5b90d1b/06d55bb2/ecd4d3a6.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/3750c07a/f5b90d1b/06d55bb2/ecd4d3a6.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/3750c07a/f5b90d1b/06d55bb2/ecd4d3a6.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Обратите внимание, что при выполнении 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg log&lt;/pre&gt;

&lt;p&gt;
 она видит всю историю. То есть Роза скачала весь репозиторий с полной историей всего, что уже произошло.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Сейчас Роза сделает изменение и внесет его в репозиторий:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/625ee93f/4abace04/4fa31409/85261f2d.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/625ee93f/4abace04/4fa31409/85261f2d.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/625ee93f/4abace04/4fa31409/85261f2d.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Вот, коммитит. Обратите внимание, что она может работать даже если сервер не работает: коммит полностью выполняется на ее машине. &amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/2326821c/0aa0eb4e/1b0ff6ad/985efcd6.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/2326821c/0aa0eb4e/1b0ff6ad/985efcd6.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/2326821c/0aa0eb4e/1b0ff6ad/985efcd6.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Пока Роза делала свои изменения, я тоже кое-что сделал.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/5e8ea447/72ead90e/263bba3f/8721f9eb.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/5e8ea447/72ead90e/263bba3f/8721f9eb.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/5e8ea447/72ead90e/263bba3f/8721f9eb.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
После того, как я зафиксирую свои изменения, станет видно, что в моем логе под номером два указано не то же, что у Розы.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/2dba88e3/6da5d0aa/a3bb4bd9/7b38c1e1.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/2dba88e3/6da5d0aa/a3bb4bd9/7b38c1e1.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/2dba88e3/6da5d0aa/a3bb4bd9/7b38c1e1.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Истории в наших репозиториях начали отличаться.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/a9c1352a/9d5dc961/99774de2/5ae54129.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/a9c1352a/9d5dc961/99774de2/5ae54129.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/a9c1352a/9d5dc961/99774de2/5ae54129.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Не переживайте, скоро увидим, как свести все эти изменения воедино для получения отменной вкусняшки с чипсами и &amp;lt;a href=&amp;quot;&lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%A5%D0%B0%D0%B1%D0%B0%D0%BD%D0%B5%D1%80%D0%BE&quot; class=&quot;urlextern&quot; title=&quot;http://ru.wikipedia.org/wiki/%D0%A5%D0%B0%D0%B1%D0%B0%D0%BD%D0%B5%D1%80%D0%BE&quot; rel=&quot;ugc nofollow&quot;&gt;http://ru.wikipedia.org/wiki/%D0%A5%D0%B0%D0%B1%D0%B0%D0%BD%D0%B5%D1%80%D0%BE&lt;/a&gt;&amp;quot;&amp;gt;перчиком хабанеро&amp;lt;/a&amp;gt;.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Роза может продолжать работать без подключения к серверу, делая сколько угодно изменений. Она может фиксировать или откатывать изменения в своем репозитории. Однако настанет момент, когда она решит поделиться своими изменениями с остальными. Она может выполнить команду 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg outgoing&lt;/pre&gt;

&lt;p&gt;
 и увидеть список изменений, ожидающих отправки в центральный репозиторий. Это те изменения, которые будут отправлены при выполнении 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg push&lt;/pre&gt;

&lt;p&gt;
.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/db449ef2/d6b61d93/156b0919/f19dd056.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/db449ef2/d6b61d93/156b0919/f19dd056.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/db449ef2/d6b61d93/156b0919/f19dd056.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;blockquote&amp;gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg outgoing&lt;/pre&gt;

&lt;p&gt;
&amp;lt;br&amp;gt;
отображает список изменений ждущих отправки в текущем репозитории.&amp;lt;br&amp;gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg outgoing&lt;/pre&gt;

&lt;p&gt;
 это просто список всех таких изменений в текущем репозитории, которых нет в центральном репозитории.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Хорошо, вот Роза проталкивает свои изменения в центральный репозиторий.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/7fce8e5d/56405199/c27ae4af/25722734.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/7fce8e5d/56405199/c27ae4af/25722734.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/7fce8e5d/56405199/c27ae4af/25722734.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
И теперь все выглядит так:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/28086fde/fee793f7/af840235/a9751709.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/28086fde/fee793f7/af840235/a9751709.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/28086fde/fee793f7/af840235/a9751709.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
После того, как я сходил выпить четвертую чашку &amp;lt;a href=&amp;quot;&lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%9B%D0%B0%D1%82%D1%82%D0%B5&quot; class=&quot;urlextern&quot; title=&quot;http://ru.wikipedia.org/wiki/%D0%9B%D0%B0%D1%82%D1%82%D0%B5&quot; rel=&quot;ugc nofollow&quot;&gt;http://ru.wikipedia.org/wiki/%D0%9B%D0%B0%D1%82%D1%82%D0%B5&lt;/a&gt;&amp;quot;&amp;gt;латте&amp;lt;/a&amp;gt; за сегодняшний день, я тоже готов протолкнуть мое изменение про картофельные чипсы.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/66211440/3bef48f3/e7d8fa43/4a17dfb5.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/66211440/3bef48f3/e7d8fa43/4a17dfb5.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/66211440/3bef48f3/e7d8fa43/4a17dfb5.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
ААААА!!! Ошибка! Да, кстати, видите сообщение? То, в котором написано &amp;lt;i&amp;gt;используйте ключ -f для принудительного проталкивания&amp;lt;/i&amp;gt; (use push -f to force)? Это &amp;lt;i&amp;gt;ужасный&amp;lt;/i&amp;gt; совет. Никогда и ни за что &amp;lt;b&amp;gt;не используйте ключ -f&amp;lt;/b&amp;gt;. Вы пожалеете о том, что использовали его. Просто поверьте мне в данный момент.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Причина, по которой у Розы получилось протолкнуть изменения, а у меня нет в том, что картофельный чипсы и гуакамоле плохо сочетаются. Шучу, шучу! Просто хотел удостовериться, что вы еще не уснули там.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Команда завершилась с ошибкой потому, что каждый из нас сделал изменения, а значит, их нужно слить вместе, и Mercurial знает об этом.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Первым делом я заберу все изменения из центрального репозитория, которых у меня еще нет, чтобы произвести слияние (merge).&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/cc14316f/6d00f829/c045eaff/b28a5dff.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/cc14316f/6d00f829/c045eaff/b28a5dff.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/cc14316f/6d00f829/c045eaff/b28a5dff.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Тут какая-то тарабарщина про +1 голову (+1 heads). Это потому, что мой репозиторий, в котором раньше были аккуратно уложены три изменения, стал двухголовым монстром. На вершине репозитория опасно расположены два разных изменения. Вот как это выглядит:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/d20fe311/841ec62a/25136b20/a75b2b3b.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/d20fe311/841ec62a/25136b20/a75b2b3b.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/d20fe311/841ec62a/25136b20/a75b2b3b.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
У меня в репозитории теперь обе версии. Вот моя:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/7727aca4/0638daad/bddcb9a2/1cb4c06e.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/7727aca4/0638daad/bddcb9a2/1cb4c06e.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/7727aca4/0638daad/bddcb9a2/1cb4c06e.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
А вот версия Розы:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/ccca055a/4385a92c/1b996f55/8e9755c9.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/ccca055a/4385a92c/1b996f55/8e9755c9.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/ccca055a/4385a92c/1b996f55/8e9755c9.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
И я должен слить эти версии воедино. К счастью, это просто:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/94ed4e43/6c8c1c1c/f34767ff/9825f25a.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/94ed4e43/6c8c1c1c/f34767ff/9825f25a.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/94ed4e43/6c8c1c1c/f34767ff/9825f25a.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Глядите-ка! Команда 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg merge&lt;/pre&gt;

&lt;p&gt;
 взяла и объединила обе мои «головы» (изменения на вершине репозитория) в одну. Так как в данном случае мы с Розой изменили разные части файла, то конфликтов при слиянии не было и все прошло без сучка без задоринки.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;blockquote&amp;gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg merge&lt;/pre&gt;

&lt;p&gt;
&amp;lt;br&amp;gt;
производит слияние (объединение) двух «голов».&amp;lt;br&amp;gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Мне по-прежнему надо сделать коммит. Это важно. Если бы слияние не удалось, то я всегда мог бы откатиться и попробовать снова. Но, так как слияние было успешным, то я сделаю коммит. После этого я смогу протолкнуть мои изменения в центральный репозиторий.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/2372798e/f0a49c6a/2f49a1ee/75085756.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/2372798e/f0a49c6a/2f49a1ee/75085756.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/2372798e/f0a49c6a/2f49a1ee/75085756.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Теперь в центральном репозитории то же, что в моем:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/3301ab87/9868c9ff/9bb6c7ea/acb0e87e.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/3301ab87/9868c9ff/9bb6c7ea/acb0e87e.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/3301ab87/9868c9ff/9bb6c7ea/acb0e87e.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Хорошо, у меня есть изменения Розы и мои собственные изменения, но у Розы пока нет моих изменений.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Есть еще один момент, связанный с Розой, о котором я забыл рассказать. Она — доктор. Ага, доктор, который врач. Ну не чудно? Она была главным педиатром в больнице &amp;lt;a href=&amp;quot;&lt;a href=&quot;http://www.mountsinai.org/&quot; class=&quot;urlextern&quot; title=&quot;http://www.mountsinai.org/&quot; rel=&quot;ugc nofollow&quot;&gt;http://www.mountsinai.org/&lt;/a&gt;&amp;quot;&amp;gt;Mt. Sinai&amp;lt;/a&amp;gt; и получала, наверное, «раз в пять больше, чем этот поганый укурок платит своим тестерам». Никто наверняка не знает, почему она оставила медицину. Остальные тестеры думают, что случилось что-то трагичное. Еще у нее семья была: на ее столе картинка милого десятилетнего ребенка. Но теперь она живет одна, и мы не хотим лезть ей в душу.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Розе нужно вытянуть (pull) свежие входящие изменения из репозитория, чтобы получить мои изменения.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/19f31f66/0a623177/f258cc66/5667615b.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/19f31f66/0a623177/f258cc66/5667615b.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/19f31f66/0a623177/f258cc66/5667615b.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Готово. Теперь, — вам может показаться это странным, — несмотря на то, что Роза втянула новые изменения в свой репозиторий, &amp;lt;i&amp;gt;эти изменения не находятся в ее рабочем каталоге&amp;lt;/i&amp;gt;.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/c8bc0274/0d8008f0/40c44b5b/b92c3101.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/c8bc0274/0d8008f0/40c44b5b/b92c3101.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/c8bc0274/0d8008f0/40c44b5b/b92c3101.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Видите, Она по-прежнему работает с &amp;lt;a href=&amp;quot;&lt;a href=&quot;http://en.wikipedia.org/wiki/Tortilla_chip&quot; class=&quot;urlextern&quot; title=&quot;http://en.wikipedia.org/wiki/Tortilla_chip&quot; rel=&quot;ugc nofollow&quot;&gt;http://en.wikipedia.org/wiki/Tortilla_chip&lt;/a&gt;&amp;quot;&amp;gt;кукурузными чипсами&amp;lt;/a&amp;gt;. С кукурузными чипсами!&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
У нее &amp;lt;i&amp;gt;есть&amp;lt;/i&amp;gt; мои последние изменения где-то в репозитории…&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/37e67e82/67a3e142/e9022010/4fd8cfde.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/37e67e82/67a3e142/e9022010/4fd8cfde.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/37e67e82/67a3e142/e9022010/4fd8cfde.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Просто мои изменения не в ее рабочем каталоге. Это потому, что она до сих пор изменяет второй набор изменений. Это можно увидеть, выполнив команду 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg parent&lt;/pre&gt;

&lt;p&gt;
:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/248c9d9e/b3027e43/dee45f23/6063a7e3.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/248c9d9e/b3027e43/dee45f23/6063a7e3.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/248c9d9e/b3027e43/dee45f23/6063a7e3.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;blockquote&amp;gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg parent&lt;/pre&gt;

&lt;p&gt;
&amp;lt;br&amp;gt;
отображает набор изменений, находящийся в рабочем каталоге.&amp;lt;br&amp;gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Mercurial добр к нам. Вытягивать изменения всегда безопасно. Все, что происходит — это получение свежих изменений, сделанных другими людьми. Мы можем начать работать с этими изменениями позже, когда нам удобно.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Запомните, что команда 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg up&lt;/pre&gt;

&lt;p&gt;
 без аргументов приведет рабочий каталог к «макушке» (tip), то есть применит все изменения до самого верхнего набора изменений. В данном случае, это четвертый набор изменений:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/06bd58a7/84eba403/73124798/54b38879.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/06bd58a7/84eba403/73124798/54b38879.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/06bd58a7/84eba403/73124798/54b38879.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Теперь Роза видит самую свежую версию с изменениями от обоих нас.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Когда вы работаете в команде, то рабочий процесс будет выглядеть во многом так:&amp;lt;br&amp;gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;Забрать свежую версию, с которой все работают, если вы давненько этого не делали, выполнив:&amp;lt;br&amp;gt;
 &amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;hg pull&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;hg up&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&amp;lt;br&amp;gt;
 &amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Внести изменения&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Зафиксировать изменения (локально)&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Повторить пункты 2-3 до тех пор, пока у вас не получится хороший код, который вы хотите вывалить на всех остальных&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Когда вы готовы поделиться, выполнить:&amp;lt;br&amp;gt;
 &amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;hg pull для получения чужих изменений (если есть)&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;hg merge для слияния этих изменений со своими&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;тестирование! для того, чтобы удостовериться, что при слиянии ничего не попортилось&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;hg commit (для фиксации результата слияния)&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;hg push&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&amp;lt;br&amp;gt;
 &amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;h5&amp;gt;Проверь себя&amp;lt;/h5&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Вот все, что вы должны уметь делать на данный момент:&amp;lt;br&amp;gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;Настроить центральный репозиторий и дать членам команды возможность делать его клоны&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Проталкивать изменения в центральный репозиторий&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Вытягивать изменения из центрального репозитория&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Делать слияние изменений от разных авторов&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Продолжение здесь:&lt;/strong&gt;
&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_4._%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B8&quot; class=&quot;wikilink1&quot; title=&quot;hg_init:часть_4._исправляем_ошибки&quot; data-wiki-id=&quot;hg_init:часть_4._исправляем_ошибки&quot;&gt;Hg Init: Часть 4. Исправляем ошибки&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Hg Init: \u041f\u0440\u0438\u0432\u044b\u043a\u0430\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435. \u0427\u0430\u0441\u0442\u044c 3.&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;hg_init\u043f\u0440\u0438\u0432\u044b\u043a\u0430\u0435\u043c_\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c_\u0432_\u043a\u043e\u043c\u0430\u043d\u0434\u0435_\u0447\u0430\u0441\u0442\u044c_3&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;27-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_4._%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B8">
        <dc:format>text/html</dc:format>
        <dc:date>2016-02-16T14:07:10+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Hg Init: Исправляем ошибки. Часть 4.</title>
        <link>http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_4._%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B8</link>
        <description>&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:scm&amp;amp;do=showtag&amp;amp;tag=scm&quot; class=&quot;wikilink1&quot; title=&quot;tag:scm&quot; rel=&quot;tag&quot;&gt;scm&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:mercurial&amp;amp;do=showtag&amp;amp;tag=mercurial&quot; class=&quot;wikilink1&quot; title=&quot;tag:mercurial&quot; rel=&quot;tag&quot;&gt;mercurial&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:hg&amp;amp;do=showtag&amp;amp;tag=hg&quot; class=&quot;wikilink1&quot; title=&quot;tag:hg&quot; rel=&quot;tag&quot;&gt;hg&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;h1 class=&quot;sectionedit1&quot; id=&quot;hg_initисправляем_ошибки_часть_4&quot;&gt;Hg Init: Исправляем ошибки. Часть 4.&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&amp;lt;html&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;    &amp;lt;img src=&amp;quot;http://habrastorage.org/storage/eebea7f1/5482efc4/01467053/55589e0f.png&amp;quot; align=&amp;quot;left&amp;quot;&amp;gt;Это четвертая часть из серии &amp;lt;b&amp;gt;Hg Init: Учебное пособие по Mercurial&amp;lt;/b&amp;gt; от Джоэля Спольски (&amp;lt;a href=&amp;quot;http://www.joelonsoftware.com/&amp;quot;&amp;gt;Joel Spolsky&amp;lt;/a&amp;gt;). Предыдущие части:&amp;lt;br&amp;gt;&lt;/pre&gt;

&lt;p&gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&lt;a href=&quot;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_1._%D0%BF%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_subversion&quot; class=&quot;urlextern&quot; title=&quot;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_1._%D0%BF%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_subversion&quot; rel=&quot;ugc nofollow&quot;&gt;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_1._%D0%BF%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_subversion&lt;/a&gt;&amp;quot;&amp;gt;«Переобучение для пользователей Subversion»&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&lt;a href=&quot;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_2._%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_mercurial&quot; class=&quot;urlextern&quot; title=&quot;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_2._%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_mercurial&quot; rel=&quot;ugc nofollow&quot;&gt;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_2._%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_mercurial&lt;/a&gt;&amp;quot;&amp;gt;«Основы Mercurial»&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&lt;a href=&quot;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_3._%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_mercurial&quot; class=&quot;urlextern&quot; title=&quot;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_3._%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_mercurial&quot; rel=&quot;ugc nofollow&quot;&gt;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_3._%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_mercurial&lt;/a&gt;&amp;quot;&amp;gt;«Привыкаем работать в команде»&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Одно из главных преимуществ Mercurial состоит в том, что вы можете использовать личные клоны репозитория для экспериментов и разработки новых возможностей. Если что-то пошло не так, можно все исправить за мгновение.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;h4&amp;gt;Часть 4. Исправляем ошибки&amp;lt;/h4&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/6fd42c43/97dcbec7/981c68fc/c68c9abb.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/6fd42c43/97dcbec7/981c68fc/c68c9abb.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/6fd42c43/97dcbec7/981c68fc/c68c9abb.png&lt;/a&gt;&amp;quot; align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
Mercurial позволяет свободно экспериментировать. Представьте, что во время работы вы что-то не то сделали в редакторе, и случилось нечто ужасное:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;a name=&amp;quot;habracut&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/ca13ab4d/255dd0bc/0bb0ae94/924be9f7.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/ca13ab4d/255dd0bc/0bb0ae94/924be9f7.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/ca13ab4d/255dd0bc/0bb0ae94/924be9f7.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Emacs, как же я тебя люблю. Как бы то ни было, все можно исправить. Наиболее распространённым способом справиться с такими проблемами является использование команды 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg revert&lt;/pre&gt;

&lt;p&gt;
:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/64abc0c1/6b548170/8fb06654/8d15fb91.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/64abc0c1/6b548170/8fb06654/8d15fb91.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/64abc0c1/6b548170/8fb06654/8d15fb91.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;blockquote&amp;gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg revert&lt;/pre&gt;

&lt;p&gt;
&amp;lt;br&amp;gt;
возвращает файлы к состоянию, зафиксированному в репозитории.&amp;lt;br&amp;gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Эта команда вернет файлы в именно то состояние, что было у них в момент последнего коммита. Mercurial не любит что-либо удалять, так что вместо того чтобы затереть рецепт на &amp;lt;a href=&amp;quot;&lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D1%80%D0%BE%D1%81%D1%8F%D1%87%D1%8C%D1%8F_%D0%BB%D0%B0%D1%82%D1%8B%D0%BD%D1%8C&quot; class=&quot;urlextern&quot; title=&quot;http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D1%80%D0%BE%D1%81%D1%8F%D1%87%D1%8C%D1%8F_%D0%BB%D0%B0%D1%82%D1%8B%D0%BD%D1%8C&quot; rel=&quot;ugc nofollow&quot;&gt;http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D1%80%D0%BE%D1%81%D1%8F%D1%87%D1%8C%D1%8F_%D0%BB%D0%B0%D1%82%D1%8B%D0%BD%D1%8C&lt;/a&gt;&amp;quot;&amp;gt;свинском латинском&amp;lt;/a&amp;gt;, он переименовал файл:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/6bd1f78e/ff44c2ff/2af58601/3d594470.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/6bd1f78e/ff44c2ff/2af58601/3d594470.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/6bd1f78e/ff44c2ff/2af58601/3d594470.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
А что если все зашло слишком далеко и вы уже закоммитили?&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/9de936e9/28f4c3ef/539275c3/d981bd2d.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/9de936e9/28f4c3ef/539275c3/d981bd2d.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/9de936e9/28f4c3ef/539275c3/d981bd2d.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Есть команда 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg rollback&lt;/pre&gt;

&lt;p&gt;
, которая спасет вашу шкуру, но только если вы еще не протолкнули (push) ошибочный коммит в другой репозиторий. Эта команда отменяет &amp;lt;i&amp;gt;один&amp;lt;/i&amp;gt; коммит.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/25fdbb00/217ac772/0e6e63d8/beaa92be.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/25fdbb00/217ac772/0e6e63d8/beaa92be.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/25fdbb00/217ac772/0e6e63d8/beaa92be.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;blockquote&amp;gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg rollback&lt;/pre&gt;

&lt;p&gt;
&amp;lt;br&amp;gt;
отменяет один коммит, при условии, что вы не протолкнули его в другой репозиторий.&amp;lt;br&amp;gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Представьте, что вы хотите поставить большой эксперимент в свободное время. Ваш босс нанял нового дизайнера, Джима. С тех пор дизайны, которые вы получаете, стали просто абсурдны. В них кислотный зеленый текст, ничего не выровнено (на это есть «художественные» причины, ага) и юзабилити хромает. Вы хотите прийти на работу в выходной и все переделать, но боитесь коммитить свои изменения, так как не уверены на 100%, что ваши идеи лучше, чем у этого рехнувшегося дизайнера. Джим курит траву практически все время с момента пробуждения до момента отхода ко сну. Вы не хотите использовать это против него, да и все думают, что эта привычка никого не касается до тех пор, пока дизайны в порядке. Но всему есть предел. Так ведь? И дизайны у Джима не в порядке, и вообще он дерзкий какой-то.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
При работе с Mercurial вы можете просто создать клон всего репозитория:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/68c027bf/7ef55f11/c341dc59/60dc90f0.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/68c027bf/7ef55f11/c341dc59/60dc90f0.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/68c027bf/7ef55f11/c341dc59/60dc90f0.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Это не настолько расточительно, как может показаться. Так как в репозиториях &amp;lt;b&amp;gt;recipes&amp;lt;/b&amp;gt; и &amp;lt;b&amp;gt;recipes-experiment&amp;lt;/b&amp;gt; хранится одно и то же (пока), то Mercurial воспользуется &amp;quot;&amp;lt;a href=&amp;quot;&lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%96%D1%91%D1%81%D1%82%D0%BA%D0%B0%D1%8F_%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B0&quot; class=&quot;urlextern&quot; title=&quot;http://ru.wikipedia.org/wiki/%D0%96%D1%91%D1%81%D1%82%D0%BA%D0%B0%D1%8F_%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B0&quot; rel=&quot;ugc nofollow&quot;&gt;http://ru.wikipedia.org/wiki/%D0%96%D1%91%D1%81%D1%82%D0%BA%D0%B0%D1%8F_%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B0&lt;/a&gt;&amp;quot;&amp;gt;жёсткими ссылками&amp;lt;/a&amp;gt;&amp;quot; (hard links). А значит, копия репозитория будет создана быстро и не займет много дополнительного места на диске.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Теперь можно сделать ряд изменений в экспериментальной ветке:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/96ad9731/6fd2c79f/d458d7b9/235b60bd.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/96ad9731/6fd2c79f/d458d7b9/235b60bd.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/96ad9731/6fd2c79f/d458d7b9/235b60bd.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Начинаем мой великий эксперимент над рецептом гуакамоле:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/c49c10f0/cfdb23e3/4d84fb94/fa0ded5b.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/c49c10f0/cfdb23e3/4d84fb94/fa0ded5b.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/c49c10f0/cfdb23e3/4d84fb94/fa0ded5b.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
В экспериментальный репозиторий можно коммитить без опасений:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/71deac19/a844b427/b4ed24c9/e60a80d9.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/71deac19/a844b427/b4ed24c9/e60a80d9.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/71deac19/a844b427/b4ed24c9/e60a80d9.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Вы можете смело вносить изменения, фиксируя результат когда захотите. Это дает вам всю мощь контроля версий даже для вашего безумного эксперимента, причем никто не пострадает.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Если вы решите, что эксперимент не удался, то можете просто удалить весь каталог с экспериментальным репозиторием. Нет репозитория — нет проблемы.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Но если все получилось, то вам нужно лишь протолкнуть ваши новые правки:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/01fcf609/6a0e9029/b4787faa/73f02234.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/01fcf609/6a0e9029/b4787faa/73f02234.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/01fcf609/6a0e9029/b4787faa/73f02234.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
И куда же они протолкнулись?&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/5b52ac76/64573441/dfe23550/342d9ba9.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/5b52ac76/64573441/dfe23550/342d9ba9.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/5b52ac76/64573441/dfe23550/342d9ba9.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;blockquote&amp;gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg paths&lt;/pre&gt;

&lt;p&gt;
&amp;lt;br&amp;gt;
отображает список известных удаленных (remote) репозиториев.&amp;lt;br&amp;gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Строчка, начинающаяся с «default», содержит путь к репозиторию, в который 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg push&lt;/pre&gt;

&lt;p&gt;
 проталкивает изменения если вы явно не укажете другой репозиторий. Обычно в этой строчке указан путь к репозиторию, с которого вы делали клон. В данном случае это локальный каталог, но в качестве пути может быть и &lt;abbr title=&quot;Uniform Resource Locator&quot;&gt;URL&lt;/abbr&gt;. &amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/f6f677ed/a911d2d6/f822cef7/33993dea.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/f6f677ed/a911d2d6/f822cef7/33993dea.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/f6f677ed/a911d2d6/f822cef7/33993dea.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Не забывайте, что проталкивание изменений в этот &amp;lt;i&amp;gt;репозиторий…&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/5b3e3e5b/cf6dbd5e/0f29418a/c0738e7e.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/5b3e3e5b/cf6dbd5e/0f29418a/c0738e7e.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/5b3e3e5b/cf6dbd5e/0f29418a/c0738e7e.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
… не приводит к тому, что изменения появляются в рабочем каталоге.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/742d905e/607cbf55/51688a01/bb5b1f96.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/742d905e/607cbf55/51688a01/bb5b1f96.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/742d905e/607cbf55/51688a01/bb5b1f96.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;blockquote&amp;gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg parent&lt;/pre&gt;

&lt;p&gt;
&amp;lt;br&amp;gt;
отображает набор изменений, находящийся в рабочем каталоге.&amp;lt;br&amp;gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Видите? Правки про «Queso» в пятом наборе изменений. Но в моем основном репозитории работа остановилась на четвертом наборе изменений. От того, что кто-то протолкнул изменения в &amp;lt;i&amp;gt;репозиторий&amp;lt;/i&amp;gt;, рабочий каталог не обновился, и пятый набор изменений в нем не появился. Так что я по-прежнему работаю с четвертым набором изменений.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/81287b1f/9096f4a3/eae68e64/5fe130a5.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/81287b1f/9096f4a3/eae68e64/5fe130a5.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/81287b1f/9096f4a3/eae68e64/5fe130a5.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Если я захочу узнать, что в пятом наборе изменений, то мне нужно будет использовать команду 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg update&lt;/pre&gt;

&lt;p&gt;
:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/023fc2aa/41243289/e94f5f67/35276977.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/023fc2aa/41243289/e94f5f67/35276977.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/023fc2aa/41243289/e94f5f67/35276977.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Видите, что произошло? Изменения были получены, но они были после той версии, с которой я работал. Команды 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;push&lt;/pre&gt;

&lt;p&gt;
 и 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;pull&lt;/pre&gt;

&lt;p&gt;
 просто пересылают изменения между репозиториями. Эти команды не влияют на то, с чем я работаю в данный момент.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Сейчас репозитории выглядят так:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/6ebe8da2/5fac7827/7dd53ab1/5a118ca1.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/6ebe8da2/5fac7827/7dd53ab1/5a118ca1.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/6ebe8da2/5fac7827/7dd53ab1/5a118ca1.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Mercurial гибок в вопросах пересылки изменений из репозитория в репозиторий. Можно протолкнуть изменения прямо из экспериментального в центральный репозиторий:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/5b5c8de5/3a4fa941/a7e099f2/bc357932.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/5b5c8de5/3a4fa941/a7e099f2/bc357932.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/5b5c8de5/3a4fa941/a7e099f2/bc357932.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Так пятый набор изменений был отправлен из экспериментального прямиком в центральный репозиторий. Теперь, если я вернусь в свой основной репозиторий, то увижу, что в нем больше нечего проталкивать!&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/bbd0ef75/4601b945/c3774a27/4df5c17c.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/bbd0ef75/4601b945/c3774a27/4df5c17c.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/bbd0ef75/4601b945/c3774a27/4df5c17c.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Это потому, что Mercurial знает, что в центральном репозитории этот (пятый) набор изменений уже откуда-то есть. Это по-настоящему полезно, потому как иначе Mercurial мог бы попытаться применить изменения заново и серьезно запутаться.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Дизайнер Джим, после того как ему предложили работу, пообещал приступить к делам сразу же. Однако он не появлялся на работе еще два месяца. Почти все уже забыли и о нем, и о том, что предлагали ему работу, так что когда он весь такой загорелый впервые появился в офисе, честно сказать, никто толком не мог понять, кто он и что вообще происходит. Это было достаточно забавно. Внешность у него типическая. В конце концов, во всем разобрались, но так как он был новеньким, все постеснялись спросить у него, что, черт побери, произошло. И про шрамы и синяки на лице тоже не спросили. Неважно. Просто мы ненавидим этого парня.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Иногда случается, что спустя месяцы, вы обнаруживаете, что сделали ошибку.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/deaea912/fe92dd6c/ec887aaa/889f199f.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/deaea912/fe92dd6c/ec887aaa/889f199f.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/deaea912/fe92dd6c/ec887aaa/889f199f.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Картофельные чипсы? Чё за..?!&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Mercurial может изъять старый набор изменений из истории. Mercurial смотрит на набор изменений, определяет обратные действия и изменяет текущий рабочий каталог. Давайте попробуем изъять ту старую ревизию номер 2.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/4667451a/25bdb499/f632481c/2a066f45.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/4667451a/25bdb499/f632481c/2a066f45.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/4667451a/25bdb499/f632481c/2a066f45.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Матерь божья, что это было?&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/fd39bd64/6a0afc42/b16be42c/96ff7f13.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/fd39bd64/6a0afc42/b16be42c/96ff7f13.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/fd39bd64/6a0afc42/b16be42c/96ff7f13.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Вообще говоря, времени могло пройти много. Чипсы вообще могли исчезнуть из рецепта. Много всего жуткого могло произойти. А значит, иногда после изъятия ревизии объединить изменения невозможно. В таких случаях вы получите конфликты слияния (merge conflicts), которые вам нужно как-то разрешить. Вот об этом и поговорим в следующей части.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;h5&amp;gt;Проверь себя&amp;lt;/h5&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Вот то, что вы должны уметь делать после прочтения данной части:&amp;lt;br&amp;gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;Откатить случайные изменения. До того, как они зафиксированы в репозитории, и после.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Локально склонировать репозиторий для экспериментов.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Проталкивать изменения в разные репозитории.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Откатить старую ошибку, которая давным-давно была зафиксирована в репозитории.&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Продолжение здесь:&lt;/strong&gt;
&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_5._%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81_%D1%81%D0%BB%D0%B8%D1%8F%D0%BD%D0%B8%D1%8F&quot; class=&quot;wikilink1&quot; title=&quot;hg_init:часть_5._процесс_слияния&quot; data-wiki-id=&quot;hg_init:часть_5._процесс_слияния&quot;&gt;Часть 5. Процесс слияния&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Hg Init: \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u0448\u0438\u0431\u043a\u0438. \u0427\u0430\u0441\u0442\u044c 4.&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;hg_init\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c_\u043e\u0448\u0438\u0431\u043a\u0438_\u0447\u0430\u0441\u0442\u044c_4&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;28-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_5._%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81_%D1%81%D0%BB%D0%B8%D1%8F%D0%BD%D0%B8%D1%8F">
        <dc:format>text/html</dc:format>
        <dc:date>2016-02-16T14:07:45+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Hg. Процесс слияния. Часть 5.</title>
        <link>http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_5._%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81_%D1%81%D0%BB%D0%B8%D1%8F%D0%BD%D0%B8%D1%8F</link>
        <description>&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:scm&amp;amp;do=showtag&amp;amp;tag=scm&quot; class=&quot;wikilink1 tag label label-default mx-1&quot; title=&quot;tag:scm&quot; rel=&quot;tag&quot;&gt;&lt;span class=&quot;iconify&quot;  data-icon=&quot;mdi:tag-text-outline&quot;&gt;&lt;/span&gt; scm&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:mercurial&amp;amp;do=showtag&amp;amp;tag=mercurial&quot; class=&quot;wikilink1 tag label label-default mx-1&quot; title=&quot;tag:mercurial&quot; rel=&quot;tag&quot;&gt;&lt;span class=&quot;iconify&quot;  data-icon=&quot;mdi:tag-text-outline&quot;&gt;&lt;/span&gt; mercurial&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:hg&amp;amp;do=showtag&amp;amp;tag=hg&quot; class=&quot;wikilink1 tag label label-default mx-1&quot; title=&quot;tag:hg&quot; rel=&quot;tag&quot;&gt;&lt;span class=&quot;iconify&quot;  data-icon=&quot;mdi:tag-text-outline&quot;&gt;&lt;/span&gt; hg&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;h1 class=&quot;sectionedit1&quot; id=&quot;hg_процесс_слияния_часть_5&quot;&gt;Hg. Процесс слияния. Часть 5.&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&amp;lt;html&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;    &amp;lt;img src=&amp;quot;http://habrastorage.org/storage/eebea7f1/5482efc4/01467053/55589e0f.png&amp;quot; align=&amp;quot;left&amp;quot;&amp;gt;Это пятая часть из серии &amp;lt;b&amp;gt;Hg Init: Учебное пособие по Mercurial&amp;lt;/b&amp;gt; от Джоэля Спольски (&amp;lt;a href=&amp;quot;http://www.joelonsoftware.com/&amp;quot;&amp;gt;Joel Spolsky&amp;lt;/a&amp;gt;). Предыдущие части:&amp;lt;br&amp;gt;&lt;/pre&gt;

&lt;p&gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&lt;a href=&quot;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_1._%D0%BF%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_subversion&quot; class=&quot;urlextern&quot; title=&quot;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_1._%D0%BF%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_subversion&quot; rel=&quot;ugc nofollow&quot;&gt;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_1._%D0%BF%D0%B5%D1%80%D0%B5%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9_subversion&lt;/a&gt;&amp;quot;&amp;gt;«Переобучение для пользователей Subversion»&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&lt;a href=&quot;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_2._%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_mercurial&quot; class=&quot;urlextern&quot; title=&quot;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_2._%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_mercurial&quot; rel=&quot;ugc nofollow&quot;&gt;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_2._%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_mercurial&lt;/a&gt;&amp;quot;&amp;gt;«Основы Mercurial»&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&lt;a href=&quot;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_3._%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_mercurial&quot; class=&quot;urlextern&quot; title=&quot;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_3._%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_mercurial&quot; rel=&quot;ugc nofollow&quot;&gt;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_3._%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_mercurial&lt;/a&gt;&amp;quot;&amp;gt;«Привыкаем работать в команде»&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&lt;a href=&quot;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_4._%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B8&quot; class=&quot;urlextern&quot; title=&quot;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_4._%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B8&quot; rel=&quot;ugc nofollow&quot;&gt;http://docs.mirocow.com/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_4._%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC_%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B8&lt;/a&gt;&amp;quot;&amp;gt;«Исправляем ошибки»&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Иногда при слияниях возникают конфликты. Обычно их легко разрешить. В любом случае их надо разрешить, или у вас будет несколько «голов». А кому это нужно?&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;h4&amp;gt;Часть 5. Процесс слияния&amp;lt;/h4&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/640e555c/1cbdb7a6/1c1be8ce/273818dc.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/640e555c/1cbdb7a6/1c1be8ce/273818dc.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/640e555c/1cbdb7a6/1c1be8ce/273818dc.png&lt;/a&gt;&amp;quot; align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
Обеспечение слаженной работы нескольких людей над одним и тем же кодом — это важная функция системы контроля версий.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Представьте что и Роза, и я хотим внести изменения в рецепт гуакамоле. Роза работает над качеством авокадо. Перед тем как начать, она обновляет свой рабочий каталог, вытягивая свежие изменения из центрального репозитория.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;a name=&amp;quot;habracut&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/49492ce5/6d5c159c/0fceb6e4/d1371e41.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/49492ce5/6d5c159c/0fceb6e4/d1371e41.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/49492ce5/6d5c159c/0fceb6e4/d1371e41.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Теперь небольшая правка:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/1f1b5727/aa9ead27/1baec231/ea75e210.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/1f1b5727/aa9ead27/1baec231/ea75e210.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/1f1b5727/aa9ead27/1baec231/ea75e210.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Она фиксирует изменения и проталкивает их в центральный репозиторий:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/eb48ca94/8b8d8084/faf52620/567fe487.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/eb48ca94/8b8d8084/faf52620/567fe487.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/eb48ca94/8b8d8084/faf52620/567fe487.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
В это же время я делаю изменение в другой части файла:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/47aa2eae/b082887d/8f4efdf9/82c8204a.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/47aa2eae/b082887d/8f4efdf9/82c8204a.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/47aa2eae/b082887d/8f4efdf9/82c8204a.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Я могу сделать коммит, но не могу протолкнуть изменения в центральный репозиторий. &amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/06f7657f/f6e19411/72bbeee1/49613e14.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/06f7657f/f6e19411/72bbeee1/49613e14.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/06f7657f/f6e19411/72bbeee1/49613e14.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Это, пожалуй, наименее полезное сообщение об ошибке в Mercurial. Лучше было бы так:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/2668f993/5096053c/ca4cc74c/0a1bc81d.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/2668f993/5096053c/ca4cc74c/0a1bc81d.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/2668f993/5096053c/ca4cc74c/0a1bc81d.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Так я и поступлю:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/23989ae6/e098973a/29b71b73/28b63534.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/23989ae6/e098973a/29b71b73/28b63534.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/23989ae6/e098973a/29b71b73/28b63534.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Хотите узнать, что за изменения только что были получены? Для этого есть удобный способ — команда 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg log -P .&lt;/pre&gt;

&lt;p&gt;
&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/f37baadc/ba0e4f1c/8bb30299/ba53f194.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/f37baadc/ba0e4f1c/8bb30299/ba53f194.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/f37baadc/ba0e4f1c/8bb30299/ba53f194.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Ну точно, это те изменения, что сделала Роза. И что там с моим репозиторием сейчас?&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/590062e4/7361c67f/c7495e4a/0dbc0c0a.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/590062e4/7361c67f/c7495e4a/0dbc0c0a.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/590062e4/7361c67f/c7495e4a/0dbc0c0a.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
У моего репозитория «несколько голов». По сути, мой репозиторий выглядит так:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/3bd32436/06550de1/6c75bfe2/0aae9522.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/3bd32436/06550de1/6c75bfe2/0aae9522.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/3bd32436/06550de1/6c75bfe2/0aae9522.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Видите две головы? Они появились, потому что Роза сделала свои изменения, работая с седьмым набором изменений, и я тоже сделал свои изменения, работая с тем же набором. Так что теперь требуется слияние (merge). [Редактор подсказывает, что нельзя использовать пассивный залог] &amp;lt;i&amp;gt;Я должен сделать слияние.&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/5621d82f/5d6acbb8/5eb36af3/cff77626.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/5621d82f/5d6acbb8/5eb36af3/cff77626.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/5621d82f/5d6acbb8/5eb36af3/cff77626.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Команда слияния, 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg merge&lt;/pre&gt;

&lt;p&gt;
, взяла две головы и объединила их. После этого она поместила результат в мой рабочий каталог. Она не закоммитила его. Это дает мне шанс проверить, что результат слияния корректен:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/26e1e355/a577e02b/0523977e/f9da5180.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/26e1e355/a577e02b/0523977e/f9da5180.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/26e1e355/a577e02b/0523977e/f9da5180.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Похоже на правду: авокадо сорта Хасс и &amp;lt;a href=&amp;quot;&lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%A5%D0%B0%D0%BB%D0%B0%D0%BF%D0%B5%D0%BD%D1%8C%D0%BE&quot; class=&quot;urlextern&quot; title=&quot;http://ru.wikipedia.org/wiki/%D0%A5%D0%B0%D0%BB%D0%B0%D0%BF%D0%B5%D0%BD%D1%8C%D0%BE&quot; rel=&quot;ugc nofollow&quot;&gt;http://ru.wikipedia.org/wiki/%D0%A5%D0%B0%D0%BB%D0%B0%D0%BF%D0%B5%D0%BD%D1%8C%D0%BE&lt;/a&gt;&amp;quot;&amp;gt;перчики халапеньо&amp;lt;/a&amp;gt;. Так что я сделаю коммит и протолкну изменения на сервер.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/ae013a30/05787999/a42e347d/30c74efa.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/ae013a30/05787999/a42e347d/30c74efa.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/ae013a30/05787999/a42e347d/30c74efa.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Я проталкиваю два набора изменений: мои изменения про халапеньо и результат слияния, который тоже является набором изменений.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Обратите внимание на то, что в наших изменениях не было конфликтов, потому что Роза и я работали над разными частями рецепта. Потому слияние было супер-пупер простым. Это наиболее частая ситуация, потому что в большинстве организаций разные программисты работают над разными частями кода.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Иногда бывают странные организации, в которых никто не готов стукнуть кулаком по столу и все-таки разделить зоны ответственности. Это может спровоцировать неожиданное и часто необъяснимое чувство грусти среди программистов. Эту ситуацию непросто распознать. Но есть симптомы: программисты закрываются в туалетах, программисты закрываются в серверных, высокая текучесть кадров, звуки сдавленных рыданий в помещении, а также неожиданное повреждение барабанных перепонок из-за многократных выстрелов штурмовой винтовки.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
НО, даже в самых замечательных организациях с наилучшим руководством конфликты при слиянии иногда случаются, и Mercurial потребует от того, кто делает слияние, разрешить конфликт. Давайте посмотрим как это делается.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Для начала… я хочу чтобы Роза была в курсе моих изменений про халапеньо:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/7cdb3d62/986ee692/5d621d00/dee47636.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/7cdb3d62/986ee692/5d621d00/dee47636.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/7cdb3d62/986ee692/5d621d00/dee47636.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Сейчас мы увидим что случается когда у вас на-сто-я-щий конфликт: мы оба немного накосячим с ингредиентами.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Я добавил банан:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/4585d66a/853aff76/0d16a3ca/5cd2a054.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/4585d66a/853aff76/0d16a3ca/5cd2a054.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/4585d66a/853aff76/0d16a3ca/5cd2a054.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
И первым зафиксировал изменения:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/7fc22261/c85df119/fbc1b69a/4dc22812.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/7fc22261/c85df119/fbc1b69a/4dc22812.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/7fc22261/c85df119/fbc1b69a/4dc22812.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
А Роза, господи прости, добавила МАНГО в ТОМ ЖЕ МЕСТЕ рецепта.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/8ed8694b/d5f5a156/dfff95f9/d720b1fe.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/8ed8694b/d5f5a156/dfff95f9/d720b1fe.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/8ed8694b/d5f5a156/dfff95f9/d720b1fe.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
 &amp;lt;br&amp;gt;
«Зрелый молодой» манго, я не шучу.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/9b359d09/549796d6/52bb2564/634c9a94.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/9b359d09/549796d6/52bb2564/634c9a94.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/9b359d09/549796d6/52bb2564/634c9a94.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
В этот раз я первым зафиксировал изменения, так что теперь Розе придется заниматься слиянием. Ха-ха!&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/19d3e459/a1d10cb6/96edf235/f2a72de4.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/19d3e459/a1d10cb6/96edf235/f2a72de4.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/19d3e459/a1d10cb6/96edf235/f2a72de4.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
И вдруг, обнаруживается конфликт и выскакивает окошко какой-то программы для разрешения конфликтов со столь страшным интерфейсом, что только матери этой программы он может нравиться. Но программа обычно достаточно неплохо делает то, для чего предназначена, надо только разобраться как она работает. Наиболее распространенной программой для разрешения конфликтов в наше время является KDiff3, так что Роза увидит следующее:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/98500077/99d1eff2/a1de7c3f/c0eadf2d.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/98500077/99d1eff2/a1de7c3f/c0eadf2d.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/98500077/99d1eff2/a1de7c3f/c0eadf2d.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
В программе KDiff3 у вас есть четыре панели. Верхняя левая — это оригинальный файл. Верхняя средняя показывает Розе ее версию файла. Верхняя правая показывает Розе мою версию. Нижняя панель — это редактор, в котором Роза собирает итоговый файл по мере разрешения конфликтов.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Разрешать конфликты достаточно просто. Нужно пройтись по всем конфликтам и выбрать каким образом разрешить каждый из них. Роза сошла с ума и решила, что бананово-манговая гуакамоле не так уж плоха:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/4293e69b/330834b3/9a5446e0/48dc158b.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/4293e69b/330834b3/9a5446e0/48dc158b.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/4293e69b/330834b3/9a5446e0/48dc158b.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Кстати, я говорил вам, что Роза, похоже, кое с кем встречается? Как-то раз ее видели уходящей с работы с парнем, который выглядел примерно как &amp;lt;a href=&amp;quot;&lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%A4%D1%80%D0%B0%D0%BD%D1%86,_%D0%94%D0%B5%D0%BD%D0%BD%D0%B8%D1%81&quot; class=&quot;urlextern&quot; title=&quot;http://ru.wikipedia.org/wiki/%D0%A4%D1%80%D0%B0%D0%BD%D1%86,_%D0%94%D0%B5%D0%BD%D0%BD%D0%B8%D1%81&quot; rel=&quot;ugc nofollow&quot;&gt;http://ru.wikipedia.org/wiki/%D0%A4%D1%80%D0%B0%D0%BD%D1%86,_%D0%94%D0%B5%D0%BD%D0%BD%D0%B8%D1%81&lt;/a&gt;&amp;quot;&amp;gt;Деннис Франц&amp;lt;/a&amp;gt;. В таком прекрасном настроении как тогда ее давненько не видели.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Роза сохраняет изменения и закрывает KDiff3.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/05f78199/f0a9e7f9/a8d54d4d/a5513301.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/05f78199/f0a9e7f9/a8d54d4d/a5513301.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/05f78199/f0a9e7f9/a8d54d4d/a5513301.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
И конфликт разрешен.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Вот что вам стоит запомнить: вы не обязаны проводить слияние, подстраиваясь под чье-либо расписание. Вы можете выполнять 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg pull&lt;/pre&gt;

&lt;p&gt;
 когда угодно и, если не хочется сразу же разрешать конфликты, то можете свободно продолжать работать и счастливо коммитить до тех пор, пока не найдете время заняться слиянием.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;h5&amp;gt;Проверь себя&amp;lt;/h5&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Вот то, что вы должны уметь делать после прочтения данной части:&amp;lt;br&amp;gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;Работать с кодом совместно с другими людьми.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Получать их изменения.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Проталкивать свои изменения.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Разрешать конфликты, которые время от времени случаются.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Диагностировать некоторые виды программерской меланхолии.&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Заключительная часть здесь:&lt;/strong&gt;
&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_6._%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B5%D0%B2&quot; class=&quot;wikilink1&quot; title=&quot;hg_init:часть_6._архитектура_репозиториев&quot; data-wiki-id=&quot;hg_init:часть_6._архитектура_репозиториев&quot;&gt;Часть 6. Архитектура репозиториев&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Hg. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043b\u0438\u044f\u043d\u0438\u044f. \u0427\u0430\u0441\u0442\u044c 5.&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;hg_\u043f\u0440\u043e\u0446\u0435\u0441\u0441_\u0441\u043b\u0438\u044f\u043d\u0438\u044f_\u0447\u0430\u0441\u0442\u044c_5&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;27-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_6._%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B5%D0%B2">
        <dc:format>text/html</dc:format>
        <dc:date>2016-02-16T14:08:50+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>Hg. Архитектура репозиториев.  Часть 6.</title>
        <link>http://178.140.10.58:8080/doku.php?id=hg_init:%D1%87%D0%B0%D1%81%D1%82%D1%8C_6._%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B5%D0%B2</link>
        <description>&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:scm&amp;amp;do=showtag&amp;amp;tag=scm&quot; class=&quot;wikilink1&quot; title=&quot;tag:scm&quot; rel=&quot;tag&quot;&gt;scm&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:mercurial&amp;amp;do=showtag&amp;amp;tag=mercurial&quot; class=&quot;wikilink1&quot; title=&quot;tag:mercurial&quot; rel=&quot;tag&quot;&gt;mercurial&lt;/a&gt;,
	&lt;a href=&quot;http://178.140.10.58:8080/doku.php?id=tag:hg&amp;amp;do=showtag&amp;amp;tag=hg&quot; class=&quot;wikilink1&quot; title=&quot;tag:hg&quot; rel=&quot;tag&quot;&gt;hg&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;h1 class=&quot;sectionedit1&quot; id=&quot;hg_архитектура_репозиториев_часть_6&quot;&gt;Hg. Архитектура репозиториев.  Часть 6.&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
&amp;lt;html&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;    &amp;lt;img src=&amp;quot;http://habrastorage.org/storage/eebea7f1/5482efc4/01467053/55589e0f.png&amp;quot; align=&amp;quot;left&amp;quot;&amp;gt;Это шестая, заключительная часть из серии &amp;lt;b&amp;gt;Hg Init: Учебное пособие по Mercurial&amp;lt;/b&amp;gt; от Джоэля Спольски (&amp;lt;a href=&amp;quot;http://www.joelonsoftware.com/&amp;quot;&amp;gt;Joel Spolsky&amp;lt;/a&amp;gt;). Предыдущие части:&amp;lt;br&amp;gt;&lt;/pre&gt;

&lt;p&gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&lt;a href=&quot;http://habrahabr.ru/blogs/development_tools/108443/&quot; class=&quot;urlextern&quot; title=&quot;http://habrahabr.ru/blogs/development_tools/108443/&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrahabr.ru/blogs/development_tools/108443/&lt;/a&gt;&amp;quot;&amp;gt;«Переобучение для пользователей Subversion»&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&lt;a href=&quot;http://habrahabr.ru/blogs/development_tools/108658/&quot; class=&quot;urlextern&quot; title=&quot;http://habrahabr.ru/blogs/development_tools/108658/&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrahabr.ru/blogs/development_tools/108658/&lt;/a&gt;&amp;quot;&amp;gt;«Основы Mercurial»&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&lt;a href=&quot;http://habrahabr.ru/blogs/development_tools/108904/&quot; class=&quot;urlextern&quot; title=&quot;http://habrahabr.ru/blogs/development_tools/108904/&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrahabr.ru/blogs/development_tools/108904/&lt;/a&gt;&amp;quot;&amp;gt;«Привыкаем работать в команде»&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&lt;a href=&quot;http://habrahabr.ru/blogs/development_tools/109074/&quot; class=&quot;urlextern&quot; title=&quot;http://habrahabr.ru/blogs/development_tools/109074/&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrahabr.ru/blogs/development_tools/109074/&lt;/a&gt;&amp;quot;&amp;gt;«Исправляем ошибки»&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;&lt;a href=&quot;http://habrahabr.ru/blogs/development_tools/109203/&quot; class=&quot;urlextern&quot; title=&quot;http://habrahabr.ru/blogs/development_tools/109203/&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrahabr.ru/blogs/development_tools/109203/&lt;/a&gt;&amp;quot;&amp;gt;«Процесс слияния»&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/80a00e0e/f27de307/ccce4ca3/7532006e.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/80a00e0e/f27de307/ccce4ca3/7532006e.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/80a00e0e/f27de307/ccce4ca3/7532006e.png&lt;/a&gt;&amp;quot; align=&amp;quot;left&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
Mercurial позволяет очень гибко настроить репозитории. Плюс, так как слияния работают отлично и вы можете на них полагаться, можно иметь особые служебные репозитории в соответствии с требованиями процесса разработки в вашей команде.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;h4&amp;gt;Часть 6. Архитектура репозиториев&amp;lt;/h4&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Наш рецепт становится все лучше:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;a name=&amp;quot;habracut&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/d68f2d22/b07c1108/357e69d3/6be4c263.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/d68f2d22/b07c1108/357e69d3/6be4c263.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/d68f2d22/b07c1108/357e69d3/6be4c263.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Давайте приглядимся к номеру набора изменений:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/b80f7a57/03613f2d/fb95fcea/bb2f8430.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/b80f7a57/03613f2d/fb95fcea/bb2f8430.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/b80f7a57/03613f2d/fb95fcea/bb2f8430.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Первая часть номера, 13, короткая и удобная. Проблема в том, что… на нее нельзя полагаться!&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
При независимой работе членов команды и осуществлении слияний эти короткие номера могу начать отличаться у разных членов команды:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/a35d59b3/1ed965ee/64cf690c/4e903cb9.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/a35d59b3/1ed965ee/64cf690c/4e903cb9.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/a35d59b3/1ed965ee/64cf690c/4e903cb9.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Так что на практике я не могу сказать: «Хорошо, давайте выпускать версию, собранную из 13 набора изменений», потому что у сотрудников может быть разное представление о том, что является 13-тым набором. Вот почему есть еще и тот безумный шестнадцатеричный номер.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/75357326/1bf027db/eb83d6fb/73144a39.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/75357326/1bf027db/eb83d6fb/73144a39.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/75357326/1bf027db/eb83d6fb/73144a39.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Этот шестнадцатеричный номер &amp;lt;i&amp;gt;уникален&amp;lt;/i&amp;gt; во всех репозиториях и никогда не меняется.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
То есть я могу сказать людям: «Эй, сегодня релиз! 1b03ab783b17-ый набор изменений!». Согласитесь, было бы неплохо иметь возможность дать этому набору &amp;lt;i&amp;gt;имя&amp;lt;/i&amp;gt;?&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Ну, у вас есть такая возможность. Такое имя называется тег (или таг, от англ. tag).&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/29f99fca/dad78d02/617c7ae2/e1015e41.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/29f99fca/dad78d02/617c7ae2/e1015e41.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/29f99fca/dad78d02/617c7ae2/e1015e41.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Давайте теперь взглянем на лог:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/e3f5ceba/7ef7ce12/9230375b/fdac5b68.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/e3f5ceba/7ef7ce12/9230375b/fdac5b68.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/e3f5ceba/7ef7ce12/9230375b/fdac5b68.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Обратите внимание, что само добавление тега к набору изменений является набором изменений. Этот набор изменений автоматически фиксируется в репозитории (коммитится). Так что теперь каждый раз, когда я хочу сослаться на ту версию кода, что мы выпустили, я могу использовать &amp;lt;b&amp;gt;Version-1.0&amp;lt;/b&amp;gt; вместо &amp;lt;b&amp;gt;1b03ab783b17&amp;lt;/b&amp;gt;.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Замдиректора спустился с 31-го этажа для того чтобы поучаствовать в офисной вечеринке по поводу выпуска новой версии и принес ящик достаточно дорогого на вид игристого вина. Стэн немного напился. Ну, не то, чтобы немного. Вообще-то, это было что-то невиданное. Стэн снял рубашку и, показывая всем свои мускулы и солидное пузо, пытался произвести впечатление на дам из отдела маркетинга. Он хвалился: «Я буду подтягиваться на лампах» (у нас в офисе используются длинные лампы дневного света). В общем, он подпрыгнул, схватился за светильник и, конечно же, оторвал его вместе с лампами и потолочной плиткой. Неудивительно, ведь светильник весом в примерно 4,5 килограмма висел на &amp;lt;a href=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/6a621ba1/e19ec0a3/07f2e188/fee1837e.jpg&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/6a621ba1/e19ec0a3/07f2e188/fee1837e.jpg&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/6a621ba1/e19ec0a3/07f2e188/fee1837e.jpg&lt;/a&gt;&amp;quot;&amp;gt;паре проволочек&amp;lt;/a&amp;gt;, а вес Стэна как раз в том самом популярном диапазоне 130-135 килограммов. Повсюду было битое стекло и куски звукоизолирующей плитки. Стэн упал прямо на копчик и начал жаловаться, что засудит компанию за небезопасные условия труда.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Остальные вернулись на рабочие места для работы над Guac 2.0.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/c9f4e36c/0637f3bf/d472f6a8/c1d4fdea.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/c9f4e36c/0637f3bf/d472f6a8/c1d4fdea.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/c9f4e36c/0637f3bf/d472f6a8/c1d4fdea.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Коммит:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/0031b86c/94b2ba74/1baa1291/493613a4.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/0031b86c/94b2ba74/1baa1291/493613a4.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/0031b86c/94b2ba74/1baa1291/493613a4.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Не стоит и говорить, что этот рецепт пока сомнителен. Его не тестировали, к примеру. И тут звонит клиент.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
«Слишком солёно получается!», скулит клиент. И нет, он не желает подождать выхода версии 2.0 с исправлением ошибки.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
К счастью, у нас есть тот тег. Я могу использовать 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg up&lt;/pre&gt;

&lt;p&gt;
 для перехода к любой версии в репозитории.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/633fedc2/cc2c66c1/cb5d3c8f/42cbc002.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/633fedc2/cc2c66c1/cb5d3c8f/42cbc002.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/633fedc2/cc2c66c1/cb5d3c8f/42cbc002.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Теперь я могу исправить эту тупую проблему с солью:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/6a67553e/093ccf44/d290f910/6956c6f1.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/6a67553e/093ccf44/d290f910/6956c6f1.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/6a67553e/093ccf44/d290f910/6956c6f1.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Затем:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/efe56ec9/58727a58/94a0e492/e56d5553.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/efe56ec9/58727a58/94a0e492/e56d5553.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/efe56ec9/58727a58/94a0e492/e56d5553.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Mercurial напоминает мне, что мои действия создали новую голову. Теперь в репозитории две головы: версия 2.0, над которой я недавно работал, и версия, которую я только что закоммитил.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/461735ea/624be09a/a8b26521/af885f2f.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/461735ea/624be09a/a8b26521/af885f2f.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/461735ea/624be09a/a8b26521/af885f2f.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
В данный момент я могу отдать версию с последними изменениями клиенту, пометить ее как 1.1, и продолжить работать с версией 2.0.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/71bc196d/41345306/1ef4d16e/9ab05419.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/71bc196d/41345306/1ef4d16e/9ab05419.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/71bc196d/41345306/1ef4d16e/9ab05419.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Но есть одна проблема… исправления про соль отсутствуют в версии 2.0. Как мне это исправить?&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/45277523/d4534deb/e6e778b4/f3665feb.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/45277523/d4534deb/e6e778b4/f3665feb.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/45277523/d4534deb/e6e778b4/f3665feb.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/72edbdf4/50bd8cdd/e08640a9/32196428.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/72edbdf4/50bd8cdd/e08640a9/32196428.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/72edbdf4/50bd8cdd/e08640a9/32196428.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Ну вот. Я должен сделать слияние тегов. Это известный баг в Mercurial. Проблема в том, что теги в Mercurial — это просто файл с именем .hgtags, для которого тоже ведется контроль версий. Поэтому время от времени вам нужно вручную делать слияние разных версий файла .hgtags. В такой ситуации ваши действия просты… нужно всегда сохранять ОБЕ версии каждой строки в файле.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/1aa9272a/8bcae15c/b09cb4ec/5242aae8.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/1aa9272a/8bcae15c/b09cb4ec/5242aae8.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/1aa9272a/8bcae15c/b09cb4ec/5242aae8.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Описанный выше простой способ перейти к старой, помеченной версии годится, если вам нужно сделать лишь одно маленькое незапланированное изменение в выпущенном коде. Но правда в том, что в большинстве программных проектов такие ситуации возникают постоянно, а у Mercurial есть более надежный способ разобраться с ними.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Так что я сейчас отменю все изменения, сделанные после 1.0, верну репозиторий в состояние, которое у него было в момент выпуска 1.0, и затем смогу показать вам модный надежный способ исправлять баги существующих клиентов и параллельно работать над новой версией.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/920e88ad/36225520/5db9dd52/ddf8aa7a.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/920e88ad/36225520/5db9dd52/ddf8aa7a.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/920e88ad/36225520/5db9dd52/ddf8aa7a.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Идея в том, что вместо работы с одним репозиторием мы заведем два репозитория. Один репозиторий назовем &amp;lt;b&amp;gt;stable&amp;lt;/b&amp;gt;, а второй — &amp;lt;b&amp;gt;dev&amp;lt;/b&amp;gt;.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
В репозитории &amp;lt;b&amp;gt;stable&amp;lt;/b&amp;gt; хранится последняя мажорная версия кода, отправленная клиентам. Каждый раз, когда вам нужно срочно исправить баг, вы делаете это в &amp;lt;b&amp;gt;stable&amp;lt;/b&amp;gt;. В нашем примере, все патчи для версии 1.0 попадут в &amp;lt;b&amp;gt;stable&amp;lt;/b&amp;gt;.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Репозиторий &amp;lt;b&amp;gt;dev&amp;lt;/b&amp;gt; — это то место, где ведется разработка следующей мажорной версии, то есть версии 2.0.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Как только вышла версия 1.0, я клонирую &amp;lt;b&amp;gt;stable&amp;lt;/b&amp;gt; в &amp;lt;b&amp;gt;dev&amp;lt;/b&amp;gt;:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/874eef22/a1545d93/a0232e75/95342a96.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/874eef22/a1545d93/a0232e75/95342a96.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/874eef22/a1545d93/a0232e75/95342a96.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Теперь у меня два идентичных репозитория:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/6a6b8010/f84d4b0a/78f25f9a/49c5c0bc.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/6a6b8010/f84d4b0a/78f25f9a/49c5c0bc.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/6a6b8010/f84d4b0a/78f25f9a/49c5c0bc.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Так как история в обоих репозиториях одинакова до 14-го набора изменений включительно, то Mercurial воспользуется &amp;quot;&amp;lt;a href=&amp;quot;&lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%96%D1%91%D1%81%D1%82%D0%BA%D0%B0%D1%8F_%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B0&quot; class=&quot;urlextern&quot; title=&quot;http://ru.wikipedia.org/wiki/%D0%96%D1%91%D1%81%D1%82%D0%BA%D0%B0%D1%8F_%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B0&quot; rel=&quot;ugc nofollow&quot;&gt;http://ru.wikipedia.org/wiki/%D0%96%D1%91%D1%81%D1%82%D0%BA%D0%B0%D1%8F_%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B0&lt;/a&gt;&amp;quot;&amp;gt;жёсткими ссылками&amp;lt;/a&amp;gt;&amp;quot; вместо того, чтобы делать две копии на диске. Поэтому операция 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;hg clone&lt;/pre&gt;

&lt;p&gt;
 выполняется быстро и дешево, а значит, вы можете без колебаний делать много-много клонов репозитория.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Теперь начнем работать над guac в репозитории &amp;lt;b&amp;gt;dev&amp;lt;/b&amp;gt;:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/905ffd18/8d990fe0/40ba5e86/0f957768.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/905ffd18/8d990fe0/40ba5e86/0f957768.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/905ffd18/8d990fe0/40ba5e86/0f957768.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
И исправим ту проблему с солью в репозитории &amp;lt;b&amp;gt;stable&amp;lt;/b&amp;gt;:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/93b7491a/01cd83a3/2f852c5c/aea3d2a8.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/93b7491a/01cd83a3/2f852c5c/aea3d2a8.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/93b7491a/01cd83a3/2f852c5c/aea3d2a8.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Я помечу эту версию и выпущу ее как 1.1:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/d5ca3f6d/5a1321e9/abf90da0/35c32879.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/d5ca3f6d/5a1321e9/abf90da0/35c32879.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/d5ca3f6d/5a1321e9/abf90da0/35c32879.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Теперь, время от времени, нам нужно втягивать изменения из &amp;lt;b&amp;gt;stable&amp;lt;/b&amp;gt; в &amp;lt;b&amp;gt;dev&amp;lt;/b&amp;gt;:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/b8a8ffd4/dc5c701b/3b95d143/21255c0d.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/b8a8ffd4/dc5c701b/3b95d143/21255c0d.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/b8a8ffd4/dc5c701b/3b95d143/21255c0d.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Вот что мы только что сделали:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/53bf82a1/b62b1a9f/ee8752b7/398d919f.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/53bf82a1/b62b1a9f/ee8752b7/398d919f.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/53bf82a1/b62b1a9f/ee8752b7/398d919f.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
И если вы можете понять, что нарисовано на &amp;lt;i&amp;gt;этой&amp;lt;/i&amp;gt; безумной картинке, то с пониманием Mercurial у вас больше проблем не будет. Суть в том, что в репозиторий &amp;lt;b&amp;gt;stable&amp;lt;/b&amp;gt; попадают только исправления ошибок, а в репозитории &amp;lt;b&amp;gt;dev&amp;lt;/b&amp;gt; хранится новый код и проводятся слияния с исправлениями ошибок.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Есть и другие применения нескольким репозиториям.&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt; Вы можете настроить командные репозитории, в которых несколько человек вместе работают над каким-то новым функционалом. Когда они закончат и все сделанное будет работать правильно, вы протолкнете изменения из командного репозитория в главный репозиторий, и все увидят эти изменения.&amp;lt;br&amp;gt;
 &amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt; Вы можете настроить репозиторий для тестеров. Вместо того чтобы сразу проталкивать изменения в главный репозиторий, вы будете проталкивать изменения в репозиторий тестеров. Тестеры проверят изменения и когда (и если) изменения будут одобрены, вы сможете протолкнуть изменения из репозитория тестеров в главный репозиторий. При таком подходе главный репозиторий всегда будет содержать протестированный код.&amp;lt;br&amp;gt;
 &amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt; Так как у каждого разработчика свой репозиторий, то вы можете вытягивать на пробу экспериментальные изменения из репозитория товарища, не влияя на работу остальной команды.&amp;lt;br&amp;gt;
 &amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
В больших сложно устроенных организациях вы можете комбинировать эти техники и настраивать цепочки репозиториев, вытягивающих изменения друг из друга. По мере того, как какой-то функционал проходит этапы тестирования и интеграции, он втягивается в репозитории по цепочке до тех пор, пока, наконец, не окажется в главном репозитории, хранящем код, который получают клиенты:&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;img src=&amp;quot;&lt;a href=&quot;http://habrastorage.org/storage/aa0f38ff/e5a593c6/0470c7bd/89c7c3d4.png&quot; class=&quot;urlextern&quot; title=&quot;http://habrastorage.org/storage/aa0f38ff/e5a593c6/0470c7bd/89c7c3d4.png&quot; rel=&quot;ugc nofollow&quot;&gt;http://habrastorage.org/storage/aa0f38ff/e5a593c6/0470c7bd/89c7c3d4.png&lt;/a&gt;&amp;quot;&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;h5&amp;gt;Проверь себя&amp;lt;/h5&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Вот то, что вы должны уметь делать после прочтения данной части:&amp;lt;br&amp;gt;
&amp;lt;ol&amp;gt;
&amp;lt;li&amp;gt;Помечать старые версии и возвращаться к ним.&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;Организовывать работу команды с двумя репозиториями (stable и dev).&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
Что ж, так получилось, что мы дошли до конца пособия. Я даже &amp;lt;i&amp;gt;близко не подобрался&amp;lt;/i&amp;gt; к тому, чтобы описать все возможности Mercurial, но есть достаточное число материалов для углубленного изучения. Есть &amp;lt;a href=&amp;quot;&lt;a href=&quot;http://hgbook.red-bean.com/&quot; class=&quot;urlextern&quot; title=&quot;http://hgbook.red-bean.com/&quot; rel=&quot;ugc nofollow&quot;&gt;http://hgbook.red-bean.com/&lt;/a&gt;&amp;quot;&amp;gt;книга&amp;lt;/a&amp;gt;, которая описывает все крайне подробно. И если у вас есть какие-либо вопросы, то я приглашаю вас на сайт &amp;lt;a href=&amp;quot;&lt;a href=&quot;http://kiln.stackexchange.com/&quot; class=&quot;urlextern&quot; title=&quot;http://kiln.stackexchange.com/&quot; rel=&quot;ugc nofollow&quot;&gt;http://kiln.stackexchange.com/&lt;/a&gt;&amp;quot;&amp;gt;Kiln Knowledge Exchange&amp;lt;/a&amp;gt; (это как &amp;lt;a href=&amp;quot;&lt;a href=&quot;http://stackoverflow.com/&quot; class=&quot;urlextern&quot; title=&quot;http://stackoverflow.com/&quot; rel=&quot;ugc nofollow&quot;&gt;http://stackoverflow.com/&lt;/a&gt;&amp;quot;&amp;gt;StackOverflow&amp;lt;/a&amp;gt;, только для Kiln, и вопросы про Mercurial более чем приветствуются на этом сайте).&amp;lt;br&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Hg. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432.  \u0427\u0430\u0441\u0442\u044c 6.&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;hg_\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430_\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432_\u0447\u0430\u0441\u0442\u044c_6&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;27-&amp;quot;} --&gt;</description>
    </item>
    <item rdf:about="http://178.140.10.58:8080/doku.php?id=hg_init:start">
        <dc:format>text/html</dc:format>
        <dc:date>2011-10-10T15:05:34+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>HG - Mercurial</title>
        <link>http://178.140.10.58:8080/doku.php?id=hg_init:start</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;hg_-_mercurial&quot;&gt;HG - Mercurial&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;HG - Mercurial&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;hg_-_mercurial&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-30&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;основные_команды&quot;&gt;Основные команды&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435_\u043a\u043e\u043c\u0430\u043d\u0434\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;31-75&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit3&quot; id=&quot;clone_a_project_and_push_changes&quot;&gt;Clone a project and push changes&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;$ hg clone http://selenic.com/repo/hello
$ cd hello
$ (edit files)
$ hg add (new files)
$ hg commit -m &amp;#039;My changes&amp;#039;
$ hg push&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Clone a project and push changes&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;clone_a_project_and_push_changes&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;76-260&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;create_a_project_and_commit&quot;&gt;Create a project and commit&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;$ hg init (project-directory)
$ cd (project-directory)
$ (add some files)
$ hg add
$ hg commit -m &amp;#039;Initial commit&amp;#039;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Create a project and commit&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;create_a_project_and_commit&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;261-&amp;quot;} --&gt;</description>
    </item>
</rdf:RDF>
