В защиту Bazaar

Feb 05, 2011 01:41

Сегодня прочел в сети о том, что Bazaar говно. :)

В сети должно быть равновесие. :) Поэтому, из соображений благодарности к его авторам, я расскажу о том, что Bazaar - лучшая DVCS для человека, который хочет использовать все плюсы DVCS, и одновременно не забивать себе голову ненужной хуйней ерундой. Я весной 2010 года выбирал между хорошо знакомым ( Read more... )

svn, dvcs, mercurial, vcs, git, bazaar

Leave a comment

aamonster February 5 2011, 08:22:10 UTC
Я из dvcs начинал именно с bzr. А остановился пока на hg (ставится tortoisehg, всё работает - правда, это под виндой).
Так что по первому пункту - hgtk commit (hgtk push и прочее до кучи).

По второму - лично мне бранчи "на месте", а не в соседнем каталоге, сейчас удобнее (переключился - и всё работает). Ну и сама концепция named branches в репозитории - они удобны для feature-branch.

Но на самом деле просто с hg сразу стал работать, а с bzr пришлось разбираться.

Reply

gaperton February 5 2011, 12:59:58 UTC
> (переключился - и всё работает).

В смысле, путей не надо перенастраивать, так? Ну да, есть такое дело.

С другой стороны, почему бы не писать так, чтобы работоспособность не зависела от имени директории?

И кроме того, разве это не удобно - одновременно видеть все свои бранчи?

Reply

aamonster February 5 2011, 22:20:59 UTC
Ну, пути у меня в исходниках всегда относительные, с этим проблем нет.
Не надо копировать файлы данных и настроек.

Одновременно видеть бранчи - как правило, мне не требуется. Но если надо - никто не мешает сделать hg clone/hg update (кстати, меркуриал вроде тоже clone оптимизирует хардлинками) или hg archive (чтобы получить срез).

В общем, я раньше жил с CVS-ной идеологией, перешёл на hg-шные named branches - в целом понравилось.

Идеология branch==clone мне понятна (и, естественно, поддерживается hg), но не нравится тем, что когда я делаю pull - я не получаю все бранчи.

Reply

gaperton February 5 2011, 22:33:48 UTC
А надо-ли получать все бранчи?

Reply

aamonster February 5 2011, 23:00:28 UTC
_Мне_ удобно.
И, напротив, неудобно помнить, у кого какие бранчи есть.
Собственно, вопрос в сценарии использования.

Reply

mrkooll February 7 2011, 22:50:34 UTC
> По второму - лично мне бранчи "на месте", а не в соседнем каталоге, сейчас удобнее

bzr-colo не подошел по функциональности или по каким другим причинам?

Reply

aamonster February 8 2011, 09:30:45 UTC
Сейчас, наверное, подошёл бы - не знаю.
Главное-то - именно первое. Начал с bzr, потом попробовал hg - и понравилось больше (бранчи в bzr показались сложнее).

Reply

gaperton February 8 2011, 14:30:52 UTC
_Бранчи_ сложнее показались? Однако. Воистину, на вкус и цвет. :)

Reply

aamonster February 8 2011, 17:02:45 UTC
Именно. Меня очень радует hg-шная идеология - не надо явно ветвиться, ветки (безымянные) возникают по необходимости (если сам начал изменения от старой ревизии или если пришли изменения из другого источника, сделанные, начиная со старой ревизии). Т.е. просто работаешь локально (всё дерево ревизий доступно), делая при необходимости push-pull (причём push/pull гарантированно выполнимы и не вызывают коллизий).

Вот в named branches и правда не сразу въехал, и претензию, что они прилеплены поверх, понимаю =).

Reply

gaperton February 8 2011, 19:52:21 UTC
В bazaar бранчем называется ни больше ни меньше, чем hg-шный клон репозитория :). Просто в bazaar "репозиторий" называется бранчем. И все.

При простом применении, bzr полностью идентичен hg. _Полностью_. Ваще нет отличий.

Различие начинается с использованием shared repository в bazaar и named branch в hg. shared repository - аналог этого понятия в hg отсуствует, и с него реально начинается разница. Shared repository - это просто папка, находясь в которой бранчи-репозитории бранчуются-клонируются умопомрачительно быстро, ибо разделяют, а не копируют, историю. :)

И все. Ну вот что тут сложно понять, и можно не вкурить - я не понимаю :).

Reply

aamonster February 8 2011, 23:10:51 UTC
Named branch в hg надо вкурить. Иллюзия, что это сколько-нибудь значимая сущность, сбивает с толку.

А различие (в использовании, а не устройстве) начинается в двух случаях:
1. Update не на последнюю ревизию, вносим изменения, commit.
2. Clone, вносим изменения в оба репозитория (один, возможно, удалённый), push/pull (в случае bazaar - merge).

Кстати, насчёт shared repository - во первых, понятно, что в mercurial для многих сценариев это не надо (ветвление внутри репозитория). А во вторых - http://mercurial.selenic.com/wiki/HardlinkedClones

Reply

gaperton February 9 2011, 07:03:14 UTC
Отличия показаны верно.

В силу этих отличий, рекомендованный способ работы в Bazaar немного другой.

http://doc.bazaar.canonical.com/migration/en/survival/bzr-for-hg-users.html

Секция "Updating a local branch from upstream".

По поводу хардлинков - это интересная оптимизация, но она проигрывает shared repository тем, что работает только при локальном клонировании. Shared repository же работает _всегда_. В том числе, и при попытке вытянуть близкий бранч через сеть. И она же дает Базаару концептуальную простоту.

Reply

aamonster February 9 2011, 09:48:59 UTC
Концептуальную - возможно, но в ущерб простоте использования (при pull надо рассматривать два случая - собственно pull и merge - либо необходимо _руками_ поддерживать feature-branch и trunk ( ... )

Reply

gaperton February 9 2011, 10:51:40 UTC
> Хотя я и концептуальной не вижу: вместо одной сущности (репозиторий с деревом ревизий) имеем две - бранч и репозиторий,

Если хочется совсем простоты - то можно ограничится одной концепцией - [standalone] бранч, и не использовать shared repository.

А хотим гибкости - добавляем shared repository (для чего достаточно один раз дать одну команду, вообще-то), и используем уже имеющийся навык работы с бранчами и те же самые команды - ничего в воркфлоу не меняется.

Это сложно? Я умоляю. Это куда как проще, чем работа с бранчами в hg и git.

> да ещё вылезла концепция чекаутов - без которой hg прекрасно обходится.

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

Reply

gaperton February 9 2011, 11:12:08 UTC
> Допустим, работаю я на двух машинах (или эту фичу делают два разработчика), ну и есть центральный репозиторий (просто для удобства синхронизации).

В этом случае, на сервере создается бранч для фичи, его копии создаются локально всеми разработчиками фичи. И в транк вливается бранч на сервере. Так, вообще, правильно. Нефиг лить в транк что попало.

Точно так же, при работе группы над общей фичей - не надо лить в общий групповой бранч что попало - он должен быть пригоден для тестирования. И так тоже _правильно_.

И да, неплохо, если люди будут об этом помнить.

Reply

aamonster February 9 2011, 11:33:13 UTC
> > Допустим, работаю я на двух машинах (или эту фичу делают два разработчика), ну и есть центральный репозиторий (просто для удобства синхронизации).

> В этом случае, на сервере создается бранч для фичи, его копии создаются локально всеми разработчиками фичи. И в транк вливается бранч на сервере. Так, вообще, правильно. Нефиг лить в транк что попало.

Так в транк что попало и не льётся, feature-branch в него вливается по завершении.
Но мне совершенно не улыбается, создав раз структуру бранчей на сервере, руками дублировать её локально. Меня устраивает уличная магия hg - когда я просто делаю pull.
Когда мне вообще не надо думать о взаимосвязи между локальными бранчами и бранчами на сервере - ибо все бранчи есть в любом репозитории. Когда push/pull - это не действия, требующие обдумывания, а просто синхронизация.
Вот этим mercurial _проще_.

Reply


Leave a comment

Up