Bazaar: распределенная система управления версиями

Владимир | | Bazaar, Web разработка.

bazaar intro

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

На сегодняшний день наиболее популярной среди бесплатных VCS является Subversion. Но, во-первых, она не единственная, а, во-вторых, существуют VCS, которые предоставляют принципиально новые возможности.

Речь идет о так называемых распределенных системах управления версиями. Сразу поясню, что означает слово распределенные.

Системы управления версиями хранят историю изменений в специальном хранилище (repository). В случае Subversion все разработчики используют одно общее хранилище, а распределенные системы позволяют использовать для одного проекта несколько хранилищ.

Главное преимущество тут в том, что любой разработчик может нормально работать с системой контроля версий, не имея доступа к общему серверу. Естественно, любые изменения сделанные в одном хранилище можно «слить» в другое.

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

Во-первых, распространяется она по лицензии GPL v2, т.е. бесплатно.

Во-вторых, есть версии для Windows, различных дистрибутивов Linux, MacOS.

В-третьих, имеет отличную документацию.

В-четвертых, большинство команд совпадает с Subversion.

И, самое главное, разработчики заявили, что Bazaar — это Version Control for Human Beings (система управления версиями для людей). Мне очень захотелось проверить это утверждение 🙂 .

Скажу сразу, я ни минуты не жалею, что решил поработать с этой системой. Но обо всем по порядку.

Установка

Я устанавливал версию для Windows. Процесс стандартный и сводится к нажатиям на кнопку «Next». После завершения вы сможете работать с Bazaar из командной строки.

Автоматически устанавливается расширение для Проводника – TortoiseBzr, правда оно имеет статус экспериментального и использовать его я не пробовал. Меня больше интересовал плагин к Eclipse.

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

Настройка

В принципе, ничего делать не нужно. Можно, конечно, установить дополнительные плагины, но для первого знакомства с Bazaar они не нужны.

Приступаем к работе

Для эксперимента берем любую папку (например, e:\myproject). Есть в ней файлы или нет, роли не играет. Открываем консоль и, находясь в этой папке, выполняем команду:

bzr init

В результате появится скрытая папка .bzr со служебными файлами. В ней будет находиться локальное хранилище.

Теперь создаем в этой папке несколько файлов (если их там еще нет) и выполняем

bzr add

Эта команда указывает, какие файлы нужно отслеживать. В данном случае будет рекурсивно добавлено все содержимое текущей папки. Естественно, в этой команде можно явно указать имена файлов и папок или создать файл .bzrignore и перечислить в нём маски файлов (wildcards), которые отслеживать ненужно.

Чтобы сохранить изменения в хранилище, выполняем:

bzr commit -m “ваш_комментарий”

Теперь изменяем, любой из файлов и выполняем:

bzr diff

Система покажет различия в файлах рабочей копии (папке e:\myproject) и хранилище.

Чтобы зафиксировать изменения в файле, снова выполняем:

bzr commit -m “ваш_комментарий”

Примечание. В таком виде команда сохранит изменения сделанные во всех файлах рабочей копии. Если вы хотите зафиксировать изменения только в одном из них, то нужно указать его имя явно.

bzr commit -m “ваш_комментарий” file_name

Посмотреть историю изменений можно с помощью

bzr log

Старую версию файла можно получить с помощью

bzr cat -r X file_name

Х – номер ревизии

Если вы хотите вернуть рабочую копию в предыдущее состояние, выполните

bzr revert -r -Х

Так что можно обеспечить себе такой же уровень комфорта, как и при работе с Subversion. Даже выше 😉 .

Документация

Оставила очень хорошее впечатление. Помимо основного руководства есть шпаргалки, статьи для тех, кто работал с другими VCS и т.п. Кстати, советую почитать раздел Workflows, наглядно показаны возможности распределенных систем.

Заключение

Я специально хочу отметить, что не предлагаю вам немедленно переходить на Bazaar. Более того, я даже не уверен, что она когда-нибудь станет лидером на рынке. Просто децентрализованная система действительно может предоставить ряд интересных возможностей.

Кроме того, если вы раньше никогда не работали с VCS, то вам будет проще начать работать с Bazaar, чем с той же Subversion.

До встречи!

  • Вы заявили о распределенных системах управления версиями. И, не смотря на это, не показали НИ ОДНОГО свойства, которым бы Bazaar отличалась от svn или cvs. А где же принципиально новые возможности? Я что-то ни одной не увидел.

    • Принципиальное отличие — возможность работать одновременно с несколькими хранилищами. Это позволяет полноценно работать с VCS без доступа к серверу или более гибко управлять проектом.
      Например, можно организовать работу через «посредника». Т.е. несколько человек пишут код и сбрасывают его посреднику (это может быть руководитель проекта), а он проверяет его и обновляет основное хранилище на сервере. Остальные разработчики могут только читать содержимое основного хранилища. Кстати посредник может быть полностью автоматический, т.е. будет запускать заранее написанный набор тестов и если они проходят пропускать новые изменения.
      Возможностей масса. Все зависит от требований проекта и фантазии.
      Естественно можно использовать Bazaar точно так же как и Subversion, т.е. с одним хранилищем.

      Есть еще много других отличий, вроде более удобного переименования файлов, но я не считаю их принципиальными.

  • Вы заявили о распределенных системах управления версиями. И, не смотря на это, не показали НИ ОДНОГО свойства, которым бы Bazaar отличалась от svn или cvs. А где же принципиально новые возможности? Я что-то ни одной не увидел.

    • Принципиальное отличие — возможность работать одновременно с несколькими хранилищами. Это позволяет полноценно работать с VCS без доступа к серверу или более гибко управлять проектом.
      Например, можно организовать работу через «посредника». Т.е. несколько человек пишут код и сбрасывают его посреднику (это может быть руководитель проекта), а он проверяет его и обновляет основное хранилище на сервере. Остальные разработчики могут только читать содержимое основного хранилища. Кстати посредник может быть полностью автоматический, т.е. будет запускать заранее написанный набор тестов и если они проходят пропускать новые изменения.
      Возможностей масса. Все зависит от требований проекта и фантазии.
      Естественно можно использовать Bazaar точно так же как и Subversion, т.е. с одним хранилищем.

      Есть еще много других отличий, вроде более удобного переименования файлов, но я не считаю их принципиальными.

  • afon

    Не ожидвл ответ так быстро.
    Спасибо!

  • afon

    Не ожидвл ответ так быстро.
    Спасибо!

  • Komar

    Если группа разработчиков большая, то вещь просто незаменимая…

  • Komar

    Если группа разработчиков большая, то вещь просто незаменимая…

  • DeadLy

    и не уже понимаете

    replace to «и уже не понимаете»

  • DeadLy

    и не уже понимаете

    replace to «и уже не понимаете»

  • Спасибо, Владимир, отличная статья!

    Я специально хочу отметить, что не предлагаю вам немедленно переходить на Bazaar.

    Я всетаки немедлено попробую и скорее всего перейду, если действительно для людей 🙂

    • Я не очень удачно выразился. Имелось ввиду не «переходить», а «переводить существующие проекты» 🙂 (кстати, по-моему в доках есть инструкция на эту тему).

      А пробовать такие вещи нужно обязательно 😉 .

  • Спасибо, Владимир, отличная статья!

    Я специально хочу отметить, что не предлагаю вам немедленно переходить на Bazaar.

    Я всетаки немедлено попробую и скорее всего перейду, если действительно для людей 🙂

    • Я не очень удачно выразился. Имелось ввиду не «переходить», а «переводить существующие проекты» 🙂 (кстати, по-моему в доках есть инструкция на эту тему).

      А пробовать такие вещи нужно обязательно 😉 .

  • А Git не пробовали? По отзывам очень неплох, правда, я только начал его осваивать, а поскольку раньше контроль версий не использовал, то сравнить ни с чем не могу.

    • Нет не пробовал. Просто когда я выбирал какую распределенную VCS попробовать выбор был между Git, Mercurial и Bazaar. Mercurial изначально был разработан для больших проектов, у Git большинство инсталляторов для Win в стадии beta, а Bazaar показался по описанию как-то дружественнее 🙂 .
      И, самое главное, меня в первую очередь интересовал общий принцип работы с распределенными VCS, т.е. дополнительные возможности.

      • Ясно, спасибо.
        Сейчас, по-моему, Git для Windows уже в релизе.
        Если б еще нормально интегрировался с Redmine, и если бы Ruby был на Денвере Котерова, цены б этой связке (Redmine+Git+Denwer) не было.

        • Честно говоря, мне кажется, что это Redmine должен интегрироваться с Git, а не наоборот. Git как и любая другая VCS предоставляет интерфейс для работы (набор комманд), с помощью которого его можно интегрировать в любое приложение. Т.е. эта задача разработчиков Redmine написать плагин для Git (или просто встроить его в систему). А задача разработчиков Git — обеспечить удобный интерфейс и совместимость новых версий с предыдущими.

        • Вы совершенно правы 🙂 Впрочем, официально Redmine поддерживает Git (как и Bazaar), просто у меня (вероятно, в силу отсутствия опыта) не получилось нормально их интергрировать на локальном хосте

        • Да, поддержка это отдельный вопрос 🙂
          Для Bazaar вроде есть плагин к Eclipse, только он что-то сильно тормозит по сравнению с плагином для Subversion

  • А Git не пробовали? По отзывам очень неплох, правда, я только начал его осваивать, а поскольку раньше контроль версий не использовал, то сравнить ни с чем не могу.

    • Нет не пробовал. Просто когда я выбирал какую распределенную VCS попробовать выбор был между Git, Mercurial и Bazaar. Mercurial изначально был разработан для больших проектов, у Git большинство инсталляторов для Win в стадии beta, а Bazaar показался по описанию как-то дружественнее 🙂 .
      И, самое главное, меня в первую очередь интересовал общий принцип работы с распределенными VCS, т.е. дополнительные возможности.

      • Ясно, спасибо.
        Сейчас, по-моему, Git для Windows уже в релизе.
        Если б еще нормально интегрировался с Redmine, и если бы Ruby был на Денвере Котерова, цены б этой связке (Redmine+Git+Denwer) не было.

        • Честно говоря, мне кажется, что это Redmine должен интегрироваться с Git, а не наоборот. Git как и любая другая VCS предоставляет интерфейс для работы (набор комманд), с помощью которого его можно интегрировать в любое приложение. Т.е. эта задача разработчиков Redmine написать плагин для Git (или просто встроить его в систему). А задача разработчиков Git — обеспечить удобный интерфейс и совместимость новых версий с предыдущими.

        • Вы совершенно правы 🙂 Впрочем, официально Redmine поддерживает Git (как и Bazaar), просто у меня (вероятно, в силу отсутствия опыта) не получилось нормально их интергрировать на локальном хосте

        • Да, поддержка это отдельный вопрос 🙂
          Для Bazaar вроде есть плагин к Eclipse, только он что-то сильно тормозит по сравнению с плагином для Subversion