Виды систем контроля версий

Содержание

  1. Общие сведения
  2. Subversion
  3. Google.com
  4. Trac
  5. Redmine
  6. Mantis
  7. Mercurial
  8. XPlanner
  9. Cogito
  10. StGit
  11. Bazaar
  12. Darcs
  13. Ohloh.net
  14. Git
  15. Сводная таблица

Общие сведения

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

Subversion

(ранняя версия: CVS, другое название: SVN)
Свободно распространяемая централизованная система управления версиями. Создана в 2000 г. компанией CollabNet Inc.
Subversion разработана специально для замены устаревшей системы CVS, распространённой открытой системы управления версиями. Используется многими сообществами разработчиков открытого программного обеспечения. В их числе такие известные проекты, как Apache, KDE, GCC, Free Pascal, Python, Ruby, Mono, FreeBSD. Хостинг Subversion для проектов с открытым кодом предоставляют SourceForge.net и Tigris.org. Subversion используется в системах Google Code и BountySource. Также Subversion широко используется в корпоративной сфере. В 2007 году независимая компания Forrester Research, сравнивая преимущества и недостатки различных систем, оценила Subversion как «единоличного лидера в категории Standalone Software Configuration Management (SCM) и сильного участника в категории Software Configuration and Change Management (SCCM)».

Subversion — централизованная система (в отличие от распределённых систем, таких, как Git или Mercurial), то есть данные хранятся в едином хранилище. Хранилище может располагаться на локальном диске или на сетевом сервере. Работа в Subversion мало отличается от работы в других централизованных системах управления версиями. Клиенты копируют файлы из хранилища, создавая локальные рабочие копии, затем вносят изменения в рабочие копии и фиксируют эти изменения в хранилище. Несколько клиентов могут одновременно обращаться к хранилищу. Для совместной работы над файлами в Subversion преимущественно используется модель Копирование-Изменение-Слияние. Кроме того, для файлов, не допускающих слияние (различные бинарные форматы файлов), можно использовать модель Блокирование-Изменение-Разблокирование.

При сохранении новых версий используется дельта-компрессия: система находит отличия новой версии от предыдущей и записывает только их, избегая дублирования данных.
При использовании доступа с помощью WebDAV также поддерживается прозрачное управление версиями — если любой клиент WebDAV открывает для записи и затем сохраняет файл, хранящийся на сетевом ресурсе, то автоматически создаётся новая версия.

Возможности

* Реализовано большинство возможностей CVS.
* Отслеживается история файлов, директорий и метаданных файлов и директорий, в том числе при переименовании и копировании.
* Атомарная фиксация изменений.
* Возможность организации доступа к хранилищу Subversion через Apache по протоколу WebDAV/DeltaV.
* Возможность установки автономного сервера Subversion с доступом по собственному протоколу.
* «Дешёвые» операции создания ветвей и меток (требуется небольшое фиксированное количество временных и дисковых ресурсов).
* Многоуровневая архитектура библиотек, изначально рассчитанная на клиент-серверную модель.
* Клиент-серверный протокол разработан для пересылки по сети только разницы между объектами, когда это возможно.
* Затраты ресурсов пропорциональны размеру изменений, а не размеру данных, которые затронуты изменениями.
* Два возможных внутренних формата хранилища (англ. repository): база данных или набор обычных файлов.
* Версионированные символьные ссылки (только в рабочих копиях под UNIX-системами).
* Одинаково эффективная работа и с текстовыми, и с двоичными файлами.
* Вывод клиента командной строки одинаково удобен и для чтения, и для разбора программами.
* Интернационализированные сообщения программы.
* Библиотеки для языков PHP, Python, Perl, Java. Позволяют встроить функциональность клиента Subversion в программы, написанные на этих языках.
* Возможность зеркалирования хранилища.

Недостатки

Subversion не всегда может правильно обработать операции переименования файлов, если одновременно с переименованием изменяется и содержимое файла. Проблемы могут также возникнуть, если файл, переименованный в локальной копии, кто-то другой изменил в хранилище. Часть этих проблем исправлена в версии 1.5, однако это решение пока не полное.
Также слабым местом Subversion считают операции слияния веток. До версии 1.5 все такие операции пользователям приходилось отслеживать вручную, с помощью подробных записей в журнале изменений. В текущей версии появилась базовая поддержка автоматического отслеживания слияний, которую разработчики планируют улучшить в последующих релизах.
Информация, однажды помещённая в хранилище Subversion, остаётся там навсегда: файл можно удалить в текущей ревизии, но всегда есть возможность получить из хранилища одну из предыдущих ревизий, в которых файл существовал. Хотя сохранность прошлых ревизий и является, собственно, целью использования систем управления версиями, иногда бывает необходимо полностью удалить из хранилища информацию, попавшую туда по ошибке. В Subversion не предусмотрено для этого никакого штатного способа; единственная возможность заключается в создании дампа хранилища, его редактировании (это текстовый файл) и последующем восстановлении хранилища из дампа. Существуют сторонние программы для автоматизации этого процесса, но, в любом случае, для выполнения этой операции требуется временное прекращение доступа к хранилищу и вмешательство администратора с привилегиями, достаточно высокими для того, чтобы полностью стереть старое хранилище и заменить его новым.

Google.com

Trac

Trac является открытым программным обеспечением, разработанным и поддерживаемым компанией Edgewall Software (не путать с TrackStudio Enterprise и Track+, другими системами аналогичного назначения).

Trac использует минималистичный веб-интерфейс, основанный на технологии wiki, и позволяет организовать перекрёстные гиперссылки между базой данных зарегистрированных ошибок, системой управления версиями и wiki-страницами. Это даёт возможность использовать Trac в том числе и как веб-интерфейс для доступа к системе контроля версий subversion, а так же, через плагины, к Mercurial, git, Bazaar и другим.

Trac написан на языке программирования python и в настоящее время распространяется по модифицированной лицензии BSD. В качестве системы HTML шаблонов веб-интерфейса Trac до версии 0.11 использовал ClearSilver. Новые версии, начиная с 0.11, используют разработанную в Edgewall систему шаблонов Genshi, при этом совместимость с плагинами, использующими ClearSilver, будет оставлена еще в течение нескольких версий.

Redmine

Открытое серверное веб-приложение для управления проектами и отслеживания ошибок. Включает в себя календарь-планировщик и диаграммы Ганта для визуального представления хода работ по проекту и сроков. Redmine написан на Ruby представляет собой приложение на основе широко известного веб-фреймворка Ruby on Rails, что подразумевает под собой легкость в развертывании системы и в доработке под конкретные требования. Для каждого проекта можно вести свою вики и форумы.

Возможности

* Ведение нескольких проектов
* Гибкая система доступа, основанная на ролях
* Система отслеживания ошибок
* Диаграммы Ганта и календарь
* Ведение новостей проекта, документов и управление файлами
* Оповещение об изменениях с помощью RSS-потоков и email
* Wiki для каждого проекта
* Форумы для каждого проекта
* Учет временных затрат
* Настраиваемые произвольные (custom)поля для инцидентов (issues), временных затрат (time-entries), проектов и пользователей
* Легкая интеграция с репозиториями (SVN, CVS, Git, Mercurial, Bazaar и Darcs)
* Создание записей об ошибках на основе полученных писем
* Поддержка множественной LDAP аутентификации
* Возможность саморегистрации новых пользователей
* Многоязычный интерфейс (русский в том числе)
* Поддерживаются СУБД: MySQL, PostgreSQL, SQLite.

Mantis

Cвободно распространяемая система отслеживания ошибок в программных продуктах (bugtracker). Обеспечивает взаимодействие разработчиков с пользователями (тестировщиками). Позволяет пользователям заводить сообщения об ошибках и отслеживать дальнейший процесс работы над ними со стороны разработчиков.

Система имеет гибкие возможности конфигурирования, что позволяет настраивать её не только для работы над программными продуктами, но и в качестве системы учёта заявок для Helpdesk. Является веб-приложением, поэтому не требует для работы специального ПО и работает через веб-браузер.

Плюсы

* Бесплатность
* Возможность работать сразу, почти без настройки
* Код на PHP свободно модифицируем
* Понятно написанный код
* Цветовая индикация по статусу бага
* Настраиваемые пользователем поля
* Удобные фильтры
* Скорость работы
* Уведомления по e-mail
* Большое количество плагинов, расширяющих функциональность

Минусы

* Через веб-интерфейс нельзя произвести существенные изменения настроек. Необходимо настраивать в конфигурации. Через интерфейс можно редактировать возможность перехода между статусами, но не список статусов. Изменить (добавить, удалить) имеющиеся поля в фильтре, окнах создания и просмотра бага можно только редактируя код. Редактирование набора полей в списке багов возможно только в коде. Но данные операции с кодом достаточно просты и не требуют глубоких знаний программирования на PHP.

Mercurial

Кроссплатформенная распределённая система управления версиями, разработанная для эффективной работы с очень большими репозиториями кода. Mercurial первоначально был написан для Linux, позже портирован под Windows, Mac OS X и большинство Unix-систем. В первую очередь он является консольной программой. Все его операции запускаются параметрами программы hg, название которой взято от обозначения химического знака ртути (ртуть по англ. — mercury).
Система Mercurial написана на Python, хотя чувствительные к производительности части (например, своя реализация diff) выполнены в качестве Python-расширений на C. Репозитории Mercurial управляются при помощи утилиты командной строки hg.

Наряду с традиционными возможностями систем контроля версий, Mercurial поддерживает полностью децентрализованную работу (отсутствует понятие основного хранилища кода), ветвление (возможно вести несколько веток одного проекта и копировать изменения между ветками), слияние репозиториев (чем и достигается «распределённость» работы). Поддерживается обмен данными между репозиториями через HTTP/HTTPS, SSH и вручную при помощи упакованных наборов изменений.

Mercurial использует SHA1-хеши для идентификации ревизий и позволяет присваивать отдельным ревизиям индивидуальные метки. Утилита hg обладает компактным интерфейсом, и Mercurial считается простой в освоении системой. Кроме того, в марте 2009 года разработчики Python приняли решение о планируемом переходе на Mercurial. Поддерживаются Mercurial-зеркала основных репозиториев других проектов, например, GCC, GNU Emacs и Linux.

XPlanner

XPlanner is a project planning and tracking tool for eXtreme Programming (XP) teams. If you are not familiar with XP software development practices, the links page contains pointers to relevant resources. To summarize the XP planning process, the customers pick the features to be added (user stories) to each development iteration (typically, one to three weeks in duration). The developers estimate the effort to complete the stories either at the story level or by decomposing the story into tasks and estimating those. Information about team development velocity from the previous iteration is used to estimate if the team can complete the stories proposed by the customer. If the team appears to be overcommitted, the set of stories are renegotiated with the customer. The XPlanner tool was created to support this process and address issues experienced in a long-term real-life XP project.

This is very much a work in progress. We expect this tool to evolve as our and the software community's understanding of XP and other agile processes increases. If you'd like to the discuss the planning approaches supported by this tool or provide other feedback and suggestions there is a mailing list for that purpose or contribute to our wiki.

Возможности

* Simple planning model
* Virtual note cards
* Support for recording and tracking projects, iterations, user stories, and tasks.
* Smart continuation of unfinished stories (unfinished tasks copied, copied stories are crosslinked).
* Distributed integration token (with email notification)
* Online time tracking and time sheet generation at individual/team level
* Metrics generation (team velocity, individual hours, ...)
* Charts for iteration velocity, Scrum burn down, distribution of task types, dispositions, and more..
* Ability to attach notes to stories and tasks (with attachments).
* Iteration estimate accuracy view
* Page showing task and story status for individual developers and customers.
* Export of project and iteration information to XML, MPX (MS Project), PDF, and iCal formats.
* TWiki-style text formatting support with support external tool integration and extensible wiki word linking.
* Integrated, extensible authentication supports multiple projects with project-specific authorization.
* SOAP interfaces for advanced XPlanner integration and extension.
* Language support for English, Spanish, French, German, Italian, Brazilian Portuguese, Danish, Russian, Chinese, and Japanese..
Последняя версия вышла 24 мая 2006 года

  • Cogito
  • При написании статьи использовались сайты: Википедия, Habrahabr.

    Сергей Лукин

    (статья незавершена)
    Пожелания и замечания сюда: serg@imech.anrb.ru