Сегодня прочел в сети о том, что Bazaar говно. :)
В сети должно быть равновесие. :) Поэтому, из соображений благодарности к его авторам, я расскажу о том, что Bazaar - лучшая DVCS для человека, который хочет использовать все плюсы DVCS, и одновременно не забивать себе голову ненужной хуйней ерундой. Я весной 2010 года выбирал между хорошо знакомым мне Subversion, а также Git/Mercurial. Остановился в результате на Mercurial, но через месяц после знакомства с Bazaar перешел на него. О чем с тех пор ни разу не жалел.
Я не буду фиксироваться на мелочах, к которым придираются прочие ревьюверы. Не буду давать бессмысленных таблиц сравнений. Я ограничусь главным - тем, что на мой взгляд, в работе имеет значение для большинства нормальных людей.
Первое.
$ bzr qcommit
Да-да, эта команда выбрасывает окно коммита, в котором вы можете сделать все, что вам нужно при совершении коммита. В том числе - глянуть дифф файла на предмет "чо это я там поменял".
Пытливому уму уже все должно стать понятно. Но я поясню. Вот эти командочки командной строки с префиксом q - существуют для всех частых и типовых операций. Что это вам дает:
1) Вам не надо рытся в мануалах, и забивать себе память ненужной информацией о дебильных флагах, ключах, и прочем. Все "флаги" будут в окне - их не надо помнить.
2) Вам не надо продираться через кучу меню и окон гуя, чтобы открыть нужное окно. Раз - о вот оно. Нужное.
3) Вам не нужно парится на тему, есть ли в вашем любимом редакторе или IDE поддержка Bazaar. При наличии QBazaar они ничего полезного не добавляют. А эта штука - работает одинаково и на всех платформах. Винда, мак, линух - неважно.
В результате - Bazaar не надо изучать. Вы им просто пользуетесь.
Второе.
В Bazaar нет дебильной концепции "бранчей", пришитых к DVCS cбоку. Вместо этого там, как и положено true DVCS, обходятся клоном репозитория, который там называется по человечески. Branch. Все очень просто - бранч - это _всегда_ клон репозитория. Но, вы скажете, клонировние - это ведь очень медленно! Только не в случае тихой базааровской оптимизации - shared repository.
Что это такое. Если вы инициализируете директорию, как shared repository (как? Так же как и все - bzr qinit), и создадите внутри нее обычный репозиторий, то процедура его бранчевания-клонирования в соседнюю директорию будет быстра. Ибо, никакого копирования истории при клонировании в этом случае не будет.
Пытливому уму понятно, что мы получаем концептуальную простоту, ничего за нее не платим, и это хорошо. Никаких дополнительных концепций не вводится - как и дополнительных операций. Что означает простую вещь - вы не забиваете себе голову ненужной ерундой.
Однако, помимо простоты у этой концепции есть скрытые достоинства. Они появляются из того факта, что бранч не обязан иметь копии исходников (working copy), а также - того, что эта копия может находится где угодно внутри shared repository.
Это позволяет делать крайне интересные лэйауты. И при желании, размещать рабочии копии разных бранчей в одной директории, переключая их, как в git. Только в Bazaar эта возможность - частный случай более гибкого механизма.
Пионеры нихуя не понимают, и негодуют, а нормальные пацаны и дефчонки смотрят примеры здесь:
http://doc.bazaar.canonical.com/latest/en/user-guide/shared_repository_layouts.html Третье.
В Bazaar родным образом реализован асинхронный push - не через жопу патчи, а нативно. Пара команд, bzr send/bzr import, позволяют вам создать файл, отправить его почтовым аттачментом (или любым другим способом), и импорт данного файла _ничем_ по существу не будет отличаться от обычного push. Это та же самая операция, но она производится асинхронно.
И четвертое.
Bazaar родным образом поддерживает централизованный кейс. Это DVCS, и одновременно - это и неплохая централизованная VCS. Как это работает? А очень просто.
1) При клонировании репозитория, вы не обязаны тянуть всю историю. Можете взять срез на текущий момент.
2) При коммите на сервер - может быть произведена проверка, не устарела ли ваша версия. Все как положено.
3) Вы можете все перечисленное совмещать. То есть, взять копию репозитория без истории, сделать туда серию локальных коммитов, а потом влить результат в центральный. И попутно - отправить изменения кому-нибудь на review воспользовавшись send. И при попытке влить изменения в центр - получить по рукам, если ваша версия устарела.
Являются ли перечисленные отличия значительными? Технически - нет. По основным техническим возможностям, GIT/Mercurial/Bazaar примерно равноценны, и держат паритет. Отличия - непринципиальны.
Но с точки зрения соотношения получаемой пользы, и времени, потраченного на изучение - то есть, с точки зрения его использования гражданскими людьми, а не сумасшедшими хакерами - Bazaar имеет огромное преимущество перед остальными системами. Это тот DVCS, который не повергнет вас в шок и трепет, и не заставит вас гордиться тем, что вы помните кучу ненужной хуйни заклинаний командной строки и прочих штук, "нириально ускоряющих вам работу".
Bazaar вообще не отвлекает на себя внимания. С ним вы можете просто работать. И начать работать немедленно. Я понимаю, гордится тут нечем - не круто это как-то, не заебаться. Это такая редкость в наши дни.
Но каждому свое. И должен вам сказать - это замечательно, когда есть выбор - не заебаться. За что - мое искреннее спасибо авторам Bazaar.
PS: И последнее. Если вы вдруг пользуетесь IDEA, или другой средой разработки от JetBrains, совместимой по плагинам - поставьте базааровский плагин. :) Он совершенно волшебен. Простая вещь - вы можете в среде переколбасить имена файлов и директорий как угодно, вместе с переколбасом контента файлов, и все будет гарантировано в порядке. История не потеряется. Ведь в bazaar, в отличии от, директория является первоклассным объектом, и отслеживается так же, как и файл.