June 29th, 2011

Я

DVCS и в частности Bazaar для самых ленивых

На первый взгляд странно, но в индустрии IT, наверное одной из самых динамичных, большинство людей - ретрограды. Идее DVCS в этом году исполняется десять лет, при этом SVN до сих пор является самой популярной VCS. Вообще, я тоже принадлежу к тем, кто десять раз подумает, прежде чем кидаться на что-то новое. И считаю это правильным, так как для совершения нетривиальных действий нужна аргументация, большая чем "это модно, все переходят на XXX". Но в очередной раз наткнувшись на статью о распределенных системах контроля версий пересилил лень и решил попробовать, о чем ни разу не жалею.
Итак, что такое DVCS и чем они полезны для тех, кто еще не поинтересовался самостоятельно:

- КО подсказывает, что основная фича DVCS - распределенность. Это означает отсутствие необходимости центрального хранилища кода в каждый момент (а при желании и вообще жить без центра). Разработчик может совершать все возможные VCS'ные действия с кодом локально без постоянных коммитов на сервер и ожидания конфликтов. Дошли до логического завершения задачи, тогда можно скинуть все локальные коммиты в центральное хранилище, разрулив коллизии один раз (при чем это скорее всего будет проще, чем с SVN, о чем ниже). А можно скинуть другому разработчику, или в хранилище посередине, которым пользуется одна из многих команд, работающих над проектом.

- Более легкое разрешение конфликтов. В Subversion для каждой копии проекта (бранч, таг, транк, локальная копия) хранится весь слепок (snapshot), и VCS не запоминает, с какая была ревизия при создании слепка. В случае мерджа нам необходимо вручную указать, какие ревизии хотим слить, и все равно получаем ситуацию "стенка на стенку" для всех коммитов из заданного диапазона. В DVCS ревизии хранятся и обмениваются между пирами только в виде changeset'ов, содержащих непосредственно сами изменения. При этом для двух бранчей, которые мы хотим объединить, можно легко найти последнюю общую ревизию, с которой начались расхождения. Проблему параллельного изменения одного и того же участка файла это, конечно, не решает, но жить становится намного легче.

- Сам себе сервер, сам себе клиент. Скачиваете дистрибутив, ГУИ к нему и получаете полноценную систему контроля версия на локальном компьютере. Все. Никаких постоянно висящих в памяти демонов и настроек репозиториев на серверной стороне. Для скачивания/закачивания изменений с других участников проекта можно выбрать один из множества стандартных протоколов: file://, http://, ftp://. Хотя при желании можно поставить заточенный под конкретную DVCS сервер, но это уже становится необязательным. И при желании его можно легко устранить.

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

Почему Bazaar? Доходчиво объяснено в этой статье.
Вкратце:
-Bazaar работает с SVN сервером, как с родным. Так что на работе все парятся с SVN, я наслаждаюсь локальными коммитами и сливаю изменения, когда дохожу до логического конца задачи, а не накапливаю их одним большим куском, надеясь, что не понадобится ролбэк.
-В качестве метаданных используется только один каталог в корне проекта. Больше никаких фильтров, игнорирующих каталоги subversion'а по маске.

Для меня эти два пункта стали определяющими при выборе конкретной реализации DVCS. Хотя Git и Mercurial более популярны, отсутствие плясок с бубном для интеграции с уже существующим SVN решает все.

Конечно, есть у проекта и проблемы (настройка прокси через переменные окружения, скан всего репозитория SVN при инициализации хранилища и некоторые другие), но все уже исследовано, запротоколировано и отправлено разработчикам :)

В общем, пробуйте. Категорически рекомендую.