by 01/29/2004
Система контроля версий позволяет разработчикам хранить прошлые версии файлов из разработки и доставать их оттуда. Она хранит информацию о версии каждого файла (и полную структуру проекта) в коллекции, обычно называемой репозиторием .
Внутри репозитория могут быть несколько параллельных линий разработки, обычно называемых ветвями . Это может быть полезно для хранения стабильной или выпущенной( released ) версии ветви, одновременно продолжая работу над рабочей версией. Другой вариант – это открыть выделенную ветвь для работы над экпериментальной возможностью.
Система контроля версий также позволяет пользователям дать ярлык( label ) снимку( snapshot ) ветви (часто называемых как тэги) для легкого доставания. Это полезно для обозначения индивидуальных релизов или самых свежих рабочих версий, предназначенных для использования.
Использование системы контроля версий безусловно обязательно для разработчика, если проект больше нескольких сот строк или если для проекта совместно работают несколько разработчиков. Использование хорошей системы контроля версий определенно лучше, нежели использование узко-направленных специальных методов, которые используют некоторые разработчики для управления различными ревизиями своего кода.
Традиционно, де-факто системой контроля версий стала CVS, но потом появилось много других, которые помогают лучше. Эта статья предлагает обзор некоторых альтернатив.
Система контроля версий можеть быть любой формы и размеров, но есть основные положения об их архитектуре. Некоторые системы поддерживают Атомарные Фиксации ( Atomic Commits ) , которые значат, что состояние всего репозитория меняется полностью. Без Атомарных Фиксаций, каждый файл или часть( unit ) меняется отдельно и поэтому состояние всего репозитория в любой точке не может быть зафиксировано.
Большинство обычных VCS ( Version Control System ) систем позволяют объединять изменения между ветвями. Это значит, что изменения, зафиксированные в одной ветви будут зафиксированы в главной линии или в другой ветви с помощью одной автоматической или, по крайней мере, полу-автоматической операцией.
Распределенная система контроля версий позволяет клонировать удаленный репозиторий, производя точную копию. Она также позволяет распростанять изменения из одного репозитория на другой. В нераспределенных VCS разработчику нужен репозиторий для того, чтобы зафиксировать изменения в нем. Это делает разработчика без доступа к репозиторию человеком второго сорта. С распределенной VCS каждый разработчик может склонировать главный репозиторий, поработать над ним и потом распространить свои изменения на главный репозиторий.
Другой общий фактор – позволяет ли репозиторий переименование файла и директории(и, возможно, также копирование). Если файл изменяет местоположение, сохранит ли репозиторий его историю? Могут ли изменения, примененные к старой структуре файлов быть примененными к новой структуре?
Из всех этих возможностей CVS поддерживает только объединение изменений.
CVS, Система Параллельных Версий – зрелая и относительно надежная система контроля версий. Много проектов с открытыми исходными кодами, включая KDE, GNOME и Mozilla используют CVS . Большинство центров открытых исходных кодов, такие как SourceForge, предлагают CVS как сервис, поэтому ее используют многие другие проекты.
Несмотря на свою популярность, CVS имеет ограничения. Например, она не поддерживает переименование файлов и директорий. Кроме того, бинарные файлы не обрабатываются достаточно хорошо. CVS – нераспределенная система и атомарные фиксации изменений не поддерживаются. Так как уже есть лучшие альтернативы, которые содержат более широкий набор функций, вы, возможно, предпочтете начать новый проект используя что-то другое.
Как плюс, CVS очень хорошо документирована в своей книге и во многих онлайн руководствах. Также существуют множество графических клиентов и дополнений.
Subversion стремится быть лучшей альтернативой CVS . Она поддерживает большинство соглашений CVS , включая большую часть набора команд, поэтому пользователи CVS быстро почувствуют себя как дома. Subversion предлагает много полезных улучшений по сравнению с CVS : копирование и переименование файлов и директорий, настоящие атомарные фиксации, эффективная обработка бинарных файлов, способность сетевой работы по HTTP (и HTTPS ). Subversion также имеет родной Win 32 клиент и сервер.
Subversion недавно начала свой бета-период, после того как была долгое время в альфа-периоде. Поэтому, она еще может иметь небольшие причуды и ее производительность в некоторых местах невелика. И все-таки, она очень полезна для своего бета-периода и была такой даже в большей части своего альфа-периода.
Сервис Subversion на основе HTTP (или HTTPS ) труден для развертывания, по сравнению с другими системами, так как он требует установленной службы Apache 2 со своим собственным специальным модулем. Также есть " svnserve " сервер, который менее способен, но более прост в установке (и быстрее) и использует специальный протокол. Кроме того, поддержка Subversion объединения изменений ограничена и похожа в этом на CVS (т.е., объединение ветвей, где файлы были перемещены не будет выполнено корректно). Она также относительно требовательна к ресурсам, особенно на крупных операциях.
Subversion много документирована в своей бесплатной онлайн книге, Контроль Версий с Subversion. Небольшая онлайн система помощи, поставляемая с Subversion клиентом может также быть полезной в качестве справочника. Subversion имеет много дополнений, но они все еще менее зрелые чем их CVS конкуренты.
GNU Arch – это VCS , первоначально созданная Томом Лордом ( Tom Lord ) для своих нужд. Изначально Arch была коллекцией shell -скриптов, но сейчас ее основной клиент это tla, который написан на C и должен переноситься на любую UNIX -систему. Он не был портирован на Win 32; хотя это и возможно сделать, это не приоритет для проекта.
Arch – распределенная система контроля версий. Она не требует специального сервиса для установки сетевого репозитория и подходит любой удаленный файловый сервис (такие как FTP , SFTP или WebDAV). Это делает установку сервиса невероятно легкой.
Arch поддерживает версионные переименования файлов и директорий, а также интеллектуальное объединение, которое может определить, был ли файл переименован и затем чисто применяет изменения. Arch стремится быть лучше CVS , но все еще есть некоторые пропущенные возможности. Версия Arch перешагнула 1.0 порог и потому объявлена зрелым и надежным продуктом для любого использования.
Arch документирована очень простой онлайн системой помощи и руководства.
OpenCM - система контроля версий, созданная для проекта EROS. OpenCM не стремится быть богатой возможностями как CVS , но она имеет несколько преимуществ. OpenCM имеет версионные переименования файлов и директорий, атомарные фиксации, автоматическое распространение изменений от ветви в главную ветвь и некоторую поддержку криптографической аутентификации.
OpenCM использует свой собственный протокол для связи мужду клиентом и сервером. Система не является распределенной. Так как OpenCM не отличается богатством возможностей, возможно что другие системы вам подойдут больше. Однако, вы можете предпочесть OpenCM , если какая-то отличительная возможность этой системы вам понравится.
OpenCM работает под любой UNIX -системой и на Windows под эмуляцией Cygwin . Она имеет CVS -подобные команды и хорошо документирована.
Aegis – система управления конфигурацией кода созданная Питером Миллером ( Peter Miller ). Она не сетевая и все операции делаются через файловую систему UNIX . По существу, она использует систему разрешений UNIX для определения, кто имеет доступ для выполнения какой операции. Несмотря на тот факт, что Aegis не сетевая, она все же распределенная в том смысле, что репозитории могут быть клонированы и изменения могут быть распространены с одного репозитория на другой. Использование по сети требует сетевой операционной системы, такой как NFS .
Будучи SCM системой, Aegis пытается обеспечить корректность кода, который был внесен. То есть, она:
· Управляет автоматизированными тестами, предотвращает внесения, которые не проходят предыдущие тесты и требует разработчиков добавить новые тесты.
· Управляет обзорами кода. Внесения должны пройти обзор обозревателя, чтобы попасть в главную линию разработки.
· Имеет различные другие возможности, которые помогают гарантировать качество кода.
Ее набор команд отражает эту философию и является очень нудным, если вам нужна просто система контроля версий.
Aegis документирована в нескольких troff документах, которые были преобразованы в PostScript . Иногда бывает трудно просмотреть документацию, чтобы найти точно то, что вам нужно.Однако документация высокого качества.
Система контроля версий Monotone была создана Грейдоном Хоэм ( Graydon Hoare ) и показывает различную философию, чем все системы, приведенные выше. Она распределенная, с наборами изменений, распространяемыми через определенное хранилище, которое может быть CGI скрипт, NNTP (новости Usenet ) получатель или SMTP ( email ). Оттуда, каждый разработчик помещает желаемые изменения в свою собственную копию репозитория.
Это может иметь печальный эффект потери синхронизации истории изменений или текущего состояния индивидуальных репозиториев друг с другом, так как индивидуальные репозитории не получают соответствующие изменения или получают несоответствующие.
Monotone очень зависит от сильного шифрования. Она идентифицирует файлы, директории и ревизии контрольными суммами SHA 1.
Monotone поддерживает переименования и копии файлов и директорий. Она имеет набор команд, который стремится быть CVS -совместимым, с некоторыми необходимыми отступлениями, из-за своей различной философии. Она должна быть переносима на Win 32, но официально перенос еще не был выполнен.
Monotone все еще в разработке и может все еще иметь некоторые проблемы в поведении. Разработчики Monotone ожидают, что проблемы разрешатся, так как работа продолжается.
В общем, Monotone содержит много из обещанного.
BitKeeper- не является системой контроля версий с открытыми кодами, но рассмотрена здесь для полноты картины, потому что некоторые проекты с открытыми кодами используют ее. BitKeeper очень надежна и богата возможностями, поддерживая распределенные репозитории; работая по HTTP ; поддерживая переименование и копирование файлов и директорий; управление патчами; распространяя изменения от ветви в главную линию и много других возможностей.
BitKeeper распространяется с двумя лицензиями. Коммерческая лицензия стоит несколько сот долларов на место (лизинг или покупка). Бесплатная лицензия доступна для разработки ПО с открытыми кодами, но имеет некоторые ограничения, среди которых – условие о неконкуренции (создаваемый продукт не может быть конкурентным по отношению к данному) и требование об обновлении системы при появлении более свежей версии, даже если она имеет другую лицензию. Кроме того, исходный код не доступен публично и бинарники существуют только для самых распространенных систем, включая Win 32.
Горстка проектов используют BitKeeper , включая некоторых из разработчиков Linux ядра и основная команда разработчиков MySQL . Она была темой многих дискуссий в рассылке Linux Kernel Mailing List . Из-за ее лицензии BitKeeper не удобен для разработки ПО с открытым кодом, так как оно заставит отвернуться многих «идеалистических» разработчиков и создаст различные проблемы для пользователей, кто выберет ее для использования. Если вы работаете над непубличным проектом и можете позволить себе заплатить за BitKeeper , это естественный вариант.
Вы, вероятно, не должны использовать CVS , так как есть лучшие альтернативы, если только вы не сможете получить хостинг где-то еще. (Замечу, что GNU Savannah предлагает хостинг для Arch и там есть документация, как ее использовать с SourceForge . Вам также не нужно бы использовать бесплатную версию BitKeeper из-за ограничений.
Другие системы более приятны, чем CVS и предоставляют лучший рабочий опыт. Когда я работал с CVS , у меня всегда занимало много времени, подумать, куда разместить файл или как его назвать, потому что я знал, что я не смогу его переименовать позже, без прерывания истории. Это не проблема в других системах контроля версий, которые поддерживают перемещение или переименование. Один проект, в который я был вовлечен, решил переименовать свои директории и разделить всю историю проекта.
У вас определенно есть много возможностей для выбора.
Сравнение по параметрам этих систем может быть найдено на сайте Better SCM Site. Rick Moen имеет список Контроль Версий и SCMs для Linux на своем веб-сайте. В конечном счете директория DMOZ Configuration Management Tools предоставит много других полезных ссылок.
В заключение, много информации о системах контроля версий и инструментах управления конфигурацией может быть найдена на FAQ странице comp.software.config-mgmt.
Shlomi Fish учится на бакалавра электротехники, в то же время пользователь Linux и ПО с открытым кодом, разработчик и сторонник