Системы контроля версий: IBM Synergy vs SVN vs Mercurial
Идет время, я узнаю новые вещи, и как это не прискорбно, забываю старые. Так вот, чтобы не забыть я лучше запишу.
Хочу рассказать о своем опыте работы с разными системами контроля версий. Если кто незнает что это такое, то милости прошу в википедию, но скажу, что это очень полезная штука. Сразу скажу, такой себе, дисклеймер, что я высказываю свое мнение, и свой опыт, который может быть не объективным.
IBM Synergy
С первой системой контроля версий, с которой я когда-либо работал, стала IBM Synergy, или как она называлась Telelogic Synergy, пока компанию Telelogic не купила IBM.
IBM Synergy – система контроля версий, основаная на заданиях (тасках, они же task). Эти таски позволяют делать удивительные вещи, о которых я расскажу далее, и даже покажу, потому что мне со старого места работы по доброй памяти прислали пару-тройку скриншотов, чему я рад, потому что можно будет увидеть. Еще один дисклеймер, я не буду писать все что знаю, потому что это будет долго и сложно, а также практически никто не поймет, кто не работал с этой системой.

В IBM Synergy есть около десятка различных типов объектов, с помощью которых и строится весь процесс. Эти объекты следующие:
Объект – любой файл или директория файловой системы. Директории могут включать в себя файлы. Файлы и директории видно на скриншоте выше.
Проект – совокупность файлов, директорий, и других проектов. Проекты видно на скриншоте выше. Такие красненькие конверты. Цвет иконки проектов устанавливается в зависимости от цели (Purpose) проекта, но об этом далее.
Релиз – Запись в базе данных, которая имеет имя и версию, релиз может включать в себя проекты. Релиз также включает в себя список целей, для которых могут создаваться проекты в этом релизе. Этот список, как и практически все в системе конфигурируется и создается администратором системи или билд-менеджерами.
Задание (Task) – собственно задание, на скриншоте выше вы можете увидеть «Текущее задание: 845: Новое задание». Задание это такая основопологающая штуковина всей системы. Задание всегда имеет имя, номер, идентификатор базы данных, релиз задания, и может включать в себя список измененных объектов (файлов и директорий) для этого задания. В системе нельзя сделать Check-out файла, директории, удалить или добавить файл/директорию/проект, чтобы это не было отображено в задании. Без задания изменения к объектам можно производить только в одном случае, о котором ниже.
Папка – это не директория файловой системы. Папка это набор заданий. Папки бывают двух видов: Те, в которые таски нужно и можно вносить вручную, либо через API, и те, которые собирают таски из базы данных автоматически, использую SQL-подобный синтаксис. Кстати, практически все запросы на поиск данных выполняются в SQL-подобном синтаксисе, либо через элементы интерфейса, либо напрямую.
Продукт (Product) – свойство файла, которое дает следующие возможности: изменять файл, не создавая для этих изменений таск и второе, вставлять этот файл как ссылку в другие проекты, или директории. Изменения без тасков реализованы с помощью автоматического таска для такого объекта, куда и вносится вся история, не заставляя пользователя создавать задание самостоятельно.
Итак, с, забыл слово, определением понятий закончили. Какже это все работает. Работает это все следующим образом.
Предположим что у нас есть какая-то задача на нашем проекте. Например пофиксить баг. Вот что нужно сделать.
Зайти в Synergy – которая есть Java приложением. Чтобы зайти, надо знать свой логин, пароль, и база данных, с которой мы хотим работать, поскольку баз данных может быть несколько, и Synergy в зависимости от настроек умеет их синхронизировать, что очень круто.
Зашли в систему, воспользовались поиском, и если нашли проект, с которым нам нужно работать, то нужно сделать Check out проекта в нужную нам версию, и нужную цель. Для разработки цель обычно Insulated development, что значит – самостоятельная разработка, и никто другой не сможет взять версии файлов, которые checked out вами во время вашей работы. Если же нужного проекта нет, то нужно будет его создать вручную, а может быть даже нужно будет создать релиз, который также можно создать с нуля, или сделать Check out из другого релиза. После создания проекта ему нужно задать Work Area – место и путь на локальном или сетевом диске, где будут лежать файлы. Кстати, проекты без Work Area – вполне нормальное явление, когда проект старый, и с ним уже никто не работает.
Окошко настроек Work Area – ниже.

После настройки проекта, нужно создать таск, с описанием чего мы делаем. Этот таск сделается текущим. Прелесть тасков в том, что можно паралельно работать над несколькими проектами и несколькими заданиями, и внимание, изменения не смешаются в кучу. Красота. Также задание может включать в себя несколько версий одного и того же объекта, если мы долго и много над ним работали, то никто не мешает нам так делать.

Далее мы делаем Check out файлам и директориям, если мы изменяем кол-во объектов внутри директорий. Check out, Check In, и другие действия над объектами делаются через контекстное меню, которое представлено ниже.

Фиксим баг, и комплитим (завершаем) задание. При завершении задания Synergy проверит, нет ли конфликтов по тем объектам которые мы изменили. Под конфликтами понимаются паралельные версии, дерево которых, не самое страшное кстати можно увидеть ниже. Если создание параллельных версий объектов разрешено в настройках релиза, то можно оставить параллели. Если нет, то нужно будет мерджить. Но мерджить лучше в любом случае :)

После того как таск завершен, то изменения сделанные в нем станут доступны друм людям, работающим над этим проктом.
Также у Synergy есть система контроля багов и улучшения, которая работает через Web интерфейс, и называется Change Synergy. Эта система контроля багов интегрирована с системой контроля версий, и таски можно привязывать к запросам на изменение.
Подводя итог, скажу, что это наверное самая сложная, настраиваемая и гибкая система контроля версий вообще. Из противоположной стороны. Для маленьких, и наверное средних компаний эта система скорее всего не подходит по двум причинам. Насколько я понял сервер системы выдает IBM, и его настраивать и конфигурировать желательно только специалистам из IBM. Вторая причина, это стоимость внедрения системы, подписка на поддержку и другие траты. На сайта IBM вы можете поискать IBM Rational Synergy, и посмотреть стоимость лицензии на одного юзера. Эта стоимость больше двух тысяч долларов.
SVN
Там, где я работаю сейчас используется SVN. У меня просто нет слов. Это ужас. Отголоски древних времен. Очень медленное, неудобное, нельзя быстро посмотреть какие файл были изменены. Нельзя параллелей делать, и еще много чего нельзя. Делать изменения в двух практически одинаковых проектах тоже напряжно. Надо постоянно мерджить файлы. В Synergy таск в папку закинул, и готово, а тут, много времени тратится на такие действия.
Скриншота системы не будет, хотя там и нечего показывать в общем.
Mercurial
Mercurial – интересная децентрализованная система версий, о которой я услышал в подкасте Радио-Т. Чем эта система понравилась лично мне для моиз проектов – это тем, что быстро разворачивается (не так как SVN), быстро работает на моих масштабах. Но все-же я использую лиш часть из возможностей, поскольку занимаюсь своими проектами сам.
Скриншотов Mercurial также не будет из соображений конфеденциальности моих данных. Mercurial бесплатен, быстро настраивается, смотрите сами :)
Что Mercurial, что SVN в общем довольно простые системы, по сравнению с Synergy. Что как помогает, иногда, так и раздражает, чуть более чем иногда. Например отсутствие версионности файлов, невозможности сделать параллельные версии файлов и т.д.
Подводя итог, скажу что выбор системы контроля версии зависит от количества людей, работающих над проектом, и от процесса во время работы. Например сейчас, когда я на работе использую SVN, иногда возникает практически непреодолимое желание выругаться, когда система не принимает изменения, ссылаясь на то, что кто-то внес какие-то другие изменения чуть раньше, и система не в состоянии разобраться как файлики объединить. Но это такое, видимо не только у меня так.
На этом и закончу сей длинный пост, который в Ворде растянулся на 4 листа.