2010-04-08

Plastic SCM - распределение с человеческим лицом

Добрейшего.

Набрел намедни на систему контроля версий Plastic SCM от CodiceSoftware. Причем набрел случайно, рассматривая ещё пару относительно редких систем.
В целом система очень понравилась. Получается нечто среднее между Perforce, Mercurial и, как ни странно, ClearCase. Причем сильнее всего смахивает именно на Perforce. Ниже - обо всех основных возможностях и о личных впечатлениях.
Ключевые возможности - следующие.

Распределенная природа работы. Многократно встречается утверждение, что Пластик - истинно распределенная система контроля. Центральный репозиторий имеет место быть, однако каждая рабочая станция может спокойно работать автономно, обмениваясь инфой как с серверами, так и с другими потребителями. Используется 2 механизма на выбор - репликации данных и обмен патчами. Рискну предположить, что в основе репликации лежит аналогичный механизм баз данных средствами back-end СУБД (но могу и ошибаться). С работой патчей тоже все, полагаю, знакомы. Причем обмениваться данными можно как угодно, например - реплицировать целиком отдельную ветку. Сервером при этом может являться даже машина разработчика. Краткая иллюстрация:

Выбор элементов для работы с помощью "selectors". Это одна из ключевых возможностей, на мой взгляд. Концепция явно взята из ClearCase и Perforce. В конфигурационном файле пишется для каждого элемента (или группы элементов): что выбирать (имя или маска для выбора), с какой ветки и версии или по какой метке. Там также пишется - что делать при чекауте элемента (например, создать автоматом ветку). Надо посмотреть исходники с другой ветки для группы файлов - меняется одна строчка, переустанавливается конфиг, дальше система подбирает из репозитория правильные версии элементов - и юзер продолжает работу (подбор новых версий и скачивание идет без его участия, автоматом). По сути, происходит выбор конфигурации продукта путем её (конфигурации) описания специальными правилами. Это позволяет более гибко задавать срез версий, который хочет получить пользователь. Такой подход более универсален, чем, например, просто номер ревизии, т.к. интересующие версии могут быть раскиданы по разным ревизиям репозитория. Здесь же можно в одном workspace видеть данные с разных веток одновременно. Вот небольшой пример селектора с одним правилом (их может быть неограниченное количество):


Возможности ветвления и слияния. Авторы считают, что надо уделять больше внимание отращиванию веток и их слиянию. Ведь именно плохая работа с branching и merge отпугивает народ в принципе от использования практик ветвления, что очень плохо (чему доказательством многочисленные войны на форумах). Создатели это понимают (и всячески это подчеркивают) - и делают всё, чтобы отращивание и слияние веток было как можно более простым. Механизм довольно интересен - с одной стороны, ветка отращивается для репозитория целиком, с другой - в неё "складываются" версии по мере появления для каждого элемента.  Слияние данных тоже не отстает по возможностям, оно там трёхпозиционное, с поиском дельты через общего предка - я с таким работал в ClearCase, отличный механизм. Ну и до кучи - есть selective merge (cherry picking), это слияние не ветки целиком, а указанного диапазона версий (такое и в SVN есть); также есть subtractive merge (про этот вид анти-слияния стоит отдельно потом написать заметку). Есть также 3D-просмотр дерева.


Переносимость. Заявляется кроссплатформенность (Windows, Linux, Solaris, MacOS), в качестве back-end используются разные СУБД. В частности, не так давно был заявлен Oracle в качестве ещё одной поддерживаемой базы. Требует .NET 2.0 - то есть или соответствующий фреймоврк под виндами, или Mono.

Интерфейс. Имеется родной GUI-клиент, есть интеграция с Visual Studio, Eclipse, JDeveloper. Есть и консольный клиент. Но основной упор делается на удобство родного клиента - вплоть до 3-хмерного просмотрщика истории элемента (веток, версий, меток и т.п.).

Интеграция с багтрекерами. В настройках клиента указаны Bugzilla, Jira, Mantis, Trac и ещё несколько других. На картинках в доках видно, что есть привязка задач к веткам, что логично и очень правильно.

Система запросов. Можно сделать поиск по куче критериев - элементов, бранчей, меток и т.п. - и выбрать для просмотра то, что надо. По сути, свой небольшой язык запросов. При разветвленной структуре проекта, да ещё и при большом количестве разработчиков и их веток - очень полезная штука.

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

В целом же привлекла внимание наиболее интересная фича - selectors. Как уже было сказано, она сильно напоминает config specs у ClearCase и аналогичный механизм у Perforce.

Пощупал
Итак, думаю, надо скачать демку и пощупать. Зарегался на сайте сначала, но потом саму закачку решил отложить - инсталятор 50 мег, а инет дома оставляет желать лучшего в вечерние часы. В общем, не стал качать, потом был занят.... И тут - письмо, пишет их продажница. Мол, Юрец, ты у нас тут по сайту ходил, решила узнать - мож тебе помощь какая нужна?
В общем, понятно - работа с потенциальным клиентом, молодцы, зачёт.
Не удержался - скачал на работе. Поставил, получил ошибку при настройке способов аутентификации между клиентом и сервером, списался с суппортом, на следующий день (разница во времени...) получил совет как победить (граждане, читайте мануалы!). Суппорту - ещё один зачет, молодцы. "....А вы все здесь - маладцы!" (с) День радио. :)

В общем, запустил. Сайт и мануал - не обманули, всё работает как описано и нарисовано на картинках.
Работа с ветками, метками и историей элементов - вполне понятна и не вызывает отторжения. По крайней мере, короткого User manual мне хватило чтобы сразу сделать всё что надо.

Selectors работают как заявлено - имея несколько отращенных веток свободно указывал несколько в селекторе и элементы действительно выбирались по нескольким веткам. Ветки растятся, метки вешаются, мёржи сливают, конфликтные ситуации ловятся. Приятный редактор диффов и слияний.
Репликации также работают нормально - получилось создать 2 репозитория на сервере и за-push-ить между ними пару веток. При этом машина разработчика становится сама сервером (работает по 8084 порту).
Интеграцию с багтрекерами не проверял, т.к. пользуюсь eTraxis, который они не поддерживают ;)

Особенности.

Все операции над объектами - элементами, ветками, метками делаются мышкой через контекстное меню, никаких кнопок на тулбаре нет, горячих клавиш нет. Для частого использования (например, интеграторами) это будет геморрой и для больших объемов работы - GUI-клиент противопоказан, надо использовать командную строку. Кстати, в некоторых других тулзах гуёвые операции сопровождаются консольным выводом - это бывает полезно - здесь же этого также нет, увы.

Сам по себе GUI - очень неплох, приятен и вообще даже местами красив. Сделал небольшое дерево веток с версиями в 3D-просмотрщике, получилось малость непонятно, но очень прикольно :) Кстати, желающие могут просмотреть историю изменений через Gource - об этом подробно написано в их блоге.


Итого
Хороший продукт, мне понравился, попробую поработать с ним в рабочем режиме.
Любителям попробовать что-то новое - качать и ставить обязательно.
Ностальгирующим по P4 или ClearCase (типа меня) - рекомендую настоятельно.
Любители распределенных систем - попробуйте, расскажите насколько модель работы Пластика плоха/хороша по сравнению с вашими тулзами.

Ссылки
Официальный сайт
Документация
Список клиентов со ссылкой на отзывы

Комментариев нет:

Отправить комментарий