======================
Bazaar за пять минут
======================

.. contents::
     Содержание

Введение
========

Bazaar |--| это распределенная система контроля версий, которая упрощает
совместную работу над программными проектами.

В течении следующих пяти минут, вы узнаете как начать контролировать версии
ваших файлов, как вносить изменения, проверять вашу работу, публиковать её и
отправлять для объединения с главной веткой проекта.

Если вы предпочитаете более подробное введение, обратитесь к разделу
`Узнать больше`_.

Установка
=========

Это руководство не описывает как установить Bazaar, потому что обычно
это очень легко. Инструкции по установке вы найдете тут:

- **GNU/Linux:** скорее всего Bazaar уже присутствует в вашем дистрибутиве GNU/Linux.
- **Windows:** `инструкции по установке для Windows`_.
- **Mac OS X:** `инструкции по установке для Mac OS X`_.

Для других платформ и для установки из исходных кодов, обратитесь к страницам
Загрузка_ и Установка_.

.. _инструкции по установке для Windows: http://wiki.bazaar.canonical.com/WindowsDownloads
.. _инструкции по установке для Mac OS X: http://wiki.bazaar.canonical.com/MacOSXBundle
.. _Загрузка: http://wiki.bazaar.canonical.com/Download
.. _Установка: http://wiki.bazaar.canonical.com/InstallationFaq

Представьтесь
=============

Прежде чем начать работать, было бы неплохо сообщить Bazaar кто вы такой.
В этом случае ваша работа будет корректно идентифицирована в истории ревизий.

Используя ваше имя и адрес электронной почты, вместо данных Васи Пупкина,
наберите::

    $ bzr whoami "Vasya Pupkin <vasya.pupkin@mail.ru>"

В этот момент Bazaar создаст или исправит файл настроек, включив в него ваше
имя и адрес электронной почты.

Теперь, проверьте правильно ли сохранены ваши имя и адрес::

    $ bzr whoami
    Vasya Pupkin <vasya.pupkin@mail.ru>


Начинаем контролировать версии файлов
=====================================

Давайте создадим каталог и несколько файлов для использования с Bazaar::

    $ mkdir myproject
    $ cd myproject
    $ mkdir subdirectory
    $ touch test1.txt test2.txt test3.txt subdirectory/test4.txt

**Замечание для пользователей Windows:** используйте Windows Explorer
для создания ваших каталогов, затем нажимайте правую кнопку мыши
в этих каталогах и выбирайте ``Новый файл``, чтобы создать ваши файлы.

Теперь дадим Bazaar возможность инициализировать свои данные в каталоге вашего
проекта::

    $ bzr init

Если всё выглядит так, как будто ничего не случилось |--| не волнуйтесь. Bazaar
создал ветку_, в которой он будет хранить рабочие файлы и историю их изменений.

.. _ветку: http://wiki.bazaar.canonical.com/Branch

Следующий шаг |--| сказать Bazaar какие файлы вы хотите контролировать. Команда
``bzr add`` рекурсивно добавит все файлы в проект::

    $ bzr add
    added subdirectory
    added test1.txt
    added test2.txt
    added test3.txt
    added subdirectory/test4.txt

Далее, нужно сохранить текущее состояние ваших файлов зафиксировав их в вашей
ветке. Добавьте сообщение объясняющее зачем вы сделали фиксацию::

	$ bzr commit -m "Импортируем файлы"

Т.к. Bazaar это распределенная система контроля версий, здесь нет необходимости
соединяться с центральным сервером для выполнения фиксации. Вместо этого,
Bazaar сохраняет вашу ветку и все её фиксации внутри каталога с которым вы
работаете; обратите внимание на подкаталог ``.bzr``.


Вносим изменения в файлы
========================

Давайте изменим какой-либо файл и зафиксируем это изменение в вашей ветке.

Отредактируйте ``test1.txt`` в своем любимом редакторе и затем посмотрите на
сделанные изменения::

    $ bzr diff
    === modified file 'test1.txt'
    --- test1.txt 2007-10-08 17:56:14 +0000
    +++ test1.txt 2007-10-08 17:46:22 +0000
    @@ -0,0 +1,1 @@
    +test test test

Зафиксируйте вашу работу в ветке Bazaar::

    $ bzr commit -m "Добавлена первая строка текста"
    Committed revision 2.


Просматриваем журнал изменений
==============================

Вы можете увидеть историю вашей ветки просмотрев её журнал::

    $ bzr log
    ------------------------------------------------------------
    revno: 2
    committer: Vasya Pupkin <vasya.pupkin@mail.ru>
    branch nick: myproject
    timestamp: Mon 2007-10-08 17:56:14 +0000
    message:
      Добавлена первая строка текста
    ------------------------------------------------------------
    revno: 1
    committer: Vasya Pupkin <vasya.pupkin@mail.ru>
    branch nick: myproject
    timestamp: Mon 2006-10-08 17:46:22 +0000
    message:
      Импортируем файлы


Публикуем ветку через SFTP
==========================

Есть несколько способов опубликовать вашу ветку. Если у вас уже есть SFTP
сервер или вам несложно его настроить, вы можете опубликовать свою ветку через
него.

В противном случае, переходите к следующему разделу, чтобы опубликовать ветку
на Launchpad_ |--| бесплатном хостинге для Bazaar.

.. _Launchpad: https://launchpad.net/

Предположим, что вы хотите опубликовать свою ветку на
``www.example.com/myproject``::

    $ bzr push --create-prefix sftp://your.name@example.com/~/public_html/myproject
    2 revision(s) pushed.

Bazaar создаст каталог ``myproject`` на удаленном сервере и поместит в него
вашу ветку.

Теперь любой желающий сможет создать свою собственную копию вашей ветки,
выполнив::

    $ bzr branch http://www.example.com/myproject

**Замечание:** чтобы использовать SFTP, может понадобиться установить
``paramiko`` и ``pyCrypto``. За подробностями обращайтесь к
http://wiki.bazaar.canonical.com/InstallationFaq.


Публикация ветки на Launchpad
=============================

Launchpad это набор инструментов для разработки и размещения проектов
свободного программного обеспечения. Вы можете использовать его для публикации
своей ветки.

Если у вас нет учетной записи Launchpad, следуйте
`руководству по получению учетной записи`_ и `зарегистрируйте SSH ключ`_
в своей новой учетной записи.

.. _руководству по получению учетной записи: https://help.launchpad.net/CreatingYourLaunchpadAccount
.. _зарегистрируйте SSH ключ: https://launchpad.net/people/+me/+editsshkeys

Заменив ``vasya.pupkin`` на ваше имя пользователя Launchpad, выполните::

	$ bzr push bzr+ssh://vasya.pupkin@bazaar.launchpad.net/~vasya.pupkin/+junk/myproject

**Замечание:** ``+junk`` означает что ветка не связана с каким-либо проектом на
Launchpad.

Теперь любой желающий сможет создать свою собственную копию вашей ветки,
выполнив::

	$ bzr branch http://bazaar.launchpad.net/~vasya.pupkin/+junk/myproject

Вы также сможете видеть информацию по вашей ветке, включая журнал изменений, по
адресу https://code.launchpad.net/people/+me/+junk/myproject


Создаем собственную копию другой ветки
======================================

Чтобы работать с чьим-либо кодом, вы можете создать собственную копию чужой
ветки. Давайте возьмем реальный пример |--| GTK интерфейс для Bazaar::

    $ bzr branch http://bazaar.launchpad.net/~bzr/bzr-gtk/trunk bzr-gtk.vasya
    Branched 292 revision(s).

Bazaar загрузит все файлы и полный журнал изменений из основной ветки проекта
bzr-gtk и создаст копию с именем bzr-gtk.vasya.

Теперь у вас есть собственная копия ветки и вы можете фиксировать изменения и с
сетевым подключением и без него. Вы можете поделиться своей веткой в любое
время, опубликовав ветку. И если команда разработчиков bzr-gtk захочет
использовать вашу работу, Bazaar легко позволит им объединить вашу ветку
обратно в их основную ветку.

Обновляем ветку изменениями из основной ветки
=============================================

Пока вы фиксируете изменения в вашей ветке, другие люди, скорее всего, так же
продолжают фиксировать код в родительской ветке.

Чтобы быть уверенным что ваша ветка содержит последние изменения, вам следует
объединить родительскую ветку с вашей личной::

    $ bzr merge
    Merging from saved parent location: http://bazaar.launchpad.net/~bzr/bzr-gtk/trunk
    All changes applied successfully.

Проверьте что изменилось::

    $ bzr diff

Если изменения вас устраивают, вы можете зафиксировать их в своей ветке::

    $ bzr commit -m "Изменения из основной ветки"
    Committed revision 295.


Объединяем свои изменения с родительской веткой
===============================================

После того как вы поработали в своей ветке bzr-gtk, вы можете захотеть
отправить ваши изменения для включения в проект. Простейший способ заключается
в использовании директивы объединения.

Директива объединения |--| это машиночитаемый запрос на осуществление
конкретного объединения. Обычно он содержит обзор изменений, которые
планируется объединить. Также директива объединения содержит либо необходимые
ревизии, либо указывает на ветку где они могут быть получены.

Заменив ``mycode.patch``, создайте свою директиву объединения::

    $ bzr send -o mycode.patch
    Using saved parent location: http://bazaar.launchpad.net/~bzr/bzr-gtk/trunk

Теперь вы можете отправить директиву объединения по электронной почте
в проект bzr-gtk. Если разработчики bzr-gtk захотят, то смогут использовать
эту директиву для включения вашей работы в основную ветку.


Узнать больше
=============

Больше информации о Bazaar вы найдете в
`Руководстве пользователя Bazaar <../user-guide/index.html>`_.

Чтобы узнать больше о Bazaar из командой строки::

    $ bzr help

Чтобы узнать основные команды Bazaar::

    $ bzr help commands

Чтобы узнать о теме или команде "foo"::

    $ bzr help foo

.. |--| unicode:: U+2014
