CVS (англ. Concurrent Versions System — система одновременных версий) — централизованная система управления версиями, популярная в 1990-е — начале 2000-х годов. Хранит историю изменений определённого набора файлов, как правило, исходного кода программного обеспечения, и облегчает совместную работу группы людей над одним проектом. Распространяется на условиях лицензии GNU GPL.
CVS | |
---|---|
Тип | централизованная система управления версиями[вд] |
Разработчик | The CVS Team[вд] |
Написана на | Си[4] |
Операционная система | Unix-подобная операционная система |
Первый выпуск | 19 ноября 1990[1] |
Последняя версия | 1.11.23[2] (8 мая 2008 ) |
Бета-версия |
|
Репозиторий | savannah.nongnu.org/proj… |
Лицензия | GNU General Public License, version 1.0 or later[вд][5] |
Сайт | nongnu.org/cvs/ (англ.) |
С конца 2000-х годов активная разработка системы прекращена (последняя версия выпущена в мае 2008 года), в исходный код вносятся только небольшие исправления[6]. Считается устаревшей[7][8][9] системой.
Основные концепции
правитьCVS использует архитектуру клиент-сервер. Обычно клиент и сервер соединяются через локальную сеть или через Интернет, но могут работать и на одной машине, если необходимо вести историю версий локального проекта. Серверное ПО обычно работает под управлением Unix (хотя существует CVS-сервер и для Windows NT), тогда как CVS-клиенты доступны во всех популярных операционных системах.
Сервер хранит в специальном хранилище (репозитории) текущие версии проекта и историю изменений, а клиент соединяется с ним, чтобы получить нужную ему версию или записать новую. Получив с сервера нужную версию (check-out), клиент создаёт локальную копию проекта (или его части) — так называемую рабочую копию. После того, как в файлы, находящиеся в рабочей копии, внесены необходимые изменения, они пересылаются на сервер (check-in).
Несколько клиентов могут работать над копиями проекта одновременно. Когда они отправляют результаты, сервер пытается объединить вместе их изменения в хранилище. Если это не удаётся, например, в случае, когда два клиента изменили одни и те же строки в определённом файле, сервер не примет изменения от последней операции check-in, и сообщит клиенту о конфликте, который должен быть исправлен вручную. Если операция check-in завершилась успешно, то номера версий всех затронутых файлов автоматически увеличиваются, и сервер записывает комментарий, дату и имя пользователя в свой журнал.
Клиенты также могут сравнить различные версии файлов, запросить полную историю изменений или получить исторический образ проекта на определённое число или по номеру версии. Многие открытые проекты разрешают анонимный доступ на чтение, который впервые был применён в OpenBSD. Это означает, что клиенты могут запрашивать и сравнивать версии файлов без пароля; только check-in-операции, ведущие к изменению данных в хранилище, требуют пароль.
Также для синхронизации локальной копии проекта с информацией на сервере клиенты могут использовать команду update, что позволяет избежать повторного скачивания всего проекта.
CVS также может содержать различные ветви проекта. Например, стабильная версия проекта может составлять одну ветвь (англ. branch), в которую вносятся только исправления ошибок, тогда как активная разработка может вестись в параллельной ветке, которая включает значительные улучшения или изменения с момента выхода стабильной версии.
CVS использует механизм дельта-компрессии для эффективного хранения различных версий одного и того же файла.
Основные понятия
правитьПроекты в CVS хранятся в виде модулей, модуль — набор файлов проекта. Сервер CVS может обслуживать несколько модулей; все модули хранятся в репозитории. Локальная копия модуля, полученная с помощью CVS-клиента, называется рабочей копией.
Операция check-out — извлечение целого модуля из CVS и создание рабочей копии; check-in — фиксация локальных изменений в репозиторий. Операция update — обновление локального проекта из CVS.
Ветвь (англ. branch) — независимое направление модификации проекта, которое может содержать ряд последовательных версий; ветвь может развиваться параллельно другим веткам; главная ветвь (англ. main trunk или HEAD) есть всегда.
Ревизия (revision) — одна из версий отдельного файла.
Одна из версий целого продукта — «релиз» (release, термин «версия» в CVS вообще не используется). К версии прикрепляется специальная метка (tag), метку можно назначить и отдельному файлу, но это делается редко, обычно тегом помечают совокупность файлов определённых ревизий (версий).
История и статус
правитьCVS является развитием более ранней системы управления версиями, имеющей название Revision Control System (RCS), которая всё ещё используется для работы с отдельными файлами, но не целыми проектами. Дик Грун привёл[10] краткие исторические сведения о CVS на своей страничке:
CVS был создан для того, чтобы иметь возможность работы с двумя моими студентами над C-компилятором ACK (Amsterdam Compiler Kit). У нас троих был почти несовместимый по времени график (один студент имел постоянное место работы, второй появлялся нерегулярно, а я мог работать над проектом только по вечерам). Их проект длился с июля 1984 по август 1985. CVS изначально назывался cmt, по причине того, что он позволил нам фиксировать версии независимо (от английского commit — фиксировать, совершать).
Код впервые увидел свет в конференции mod.sources 23 июня 1986 года.
Код, который в конце концов приобрёл вид текущей версии CVS, был начат совместно с Брайаном Берлинером в апреле 1989 года, с последующими дополнениями от Джеффа Полка и других участников. Брайан Берлинер написал[11] документ, описывающий улучшения программы CVS, которые она успела приобрести за время внутреннего использования в Prisma — стороннем разработчике ядра SunOS, после чего Брайан выпустил её на всеобщее обозрение под лицензией GPL.
Проект поддерживается группой добровольцев. Примечательно, что версия CVS для Microsoft Windows, отделившаяся в отдельный проект CVSNT, достаточно активно расширяет возможности системы, даже портируя изменения обратно на Unix под именем CVSNT.
Отношение CVS к проекту GNU может трактоваться неоднозначно: на одной странице сайт GNU распространяет программу как «пакет GNU», а на другой CVS находится в разделе «другой проект под лицензией GPL». На FTP-сервере программа находится в каталоге /non-gnu/.
Недостатки
править- Невозможно переименовать файл или каталог так, чтобы это изменение было отражено в истории.
- Ограниченная поддержка юникода и не-ASCII-имён.
- Публикации изменений не атомарны.
- Наборы изменений не поддерживаются.
- Неэффективное хранение двоичных файлов.
- Оригинальный GNU CVS не поддерживает разграничения прав между пользователями репозитория.
- Внутренние механизмы контроля целостности практически отсутствуют, зачастую даже невозможно точно утверждать, повреждён ли репозиторий, и если да, то каким образом[12].
Примечания
править- ↑ Contents of /ccvs/NEWS
- ↑ "NEWS 1.11.23". Архивировано декабрь 2021. Дата обращения: 14 апреля 2022.
{{cite news}}
: Проверьте значение даты:|archivedate=
(справка); line feed character в|archivedate=
на позиции 9 (справка) - ↑ Price D. R. Concurrent Versions System - News CVS Feature Version 1.12.13 Released! (англ.) — 2005.
- ↑ The cvs Open Source Project on Open Hub: Languages Page — 2006.
- ↑ https://cvs.savannah.nongnu.org/viewvc/cvs/ccvs/README?view=markup
- ↑ [https://web.archive.org/web/20181116130105/http://cvs.savannah.gnu.org/viewvc/cvs/ccvs/ChangeLog Архивная копия от 16 ноября 2018 на Wayback Machine [sources] Log of /cvs/ccvs/ChangeLog]
- ↑ CVS is out, Subversion is in Архивировано 25 марта 2010 года. (англ.) Red Hat magazine, август 2005 г.
- ↑ CVS — sourceforge Архивировано 10 июня 2010 года.
- ↑ CVS — система управления версиями . Дата обращения: 25 июля 2009. Архивировано 8 июля 2010 года.
- ↑ Concurrent Versions System CVS . Дата обращения: 12 января 2005. Архивировано 7 декабря 2006 года.
- ↑ CiteSeerX — CVS II: Parallelizing Software Development . Дата обращения: 12 января 2005. Архивировано 5 июня 2007 года.
- ↑ Оценка CVS в книге о Mercurial Архивная копия от 7 сентября 2013 на Wayback Machine.