Вводный раздел этой статьи может быть слишком коротким, чтобы адекватно суммировать ключевые моменты . ( Сентябрь 2018 г. ) |
Разработчик(и) | Команда CVS |
---|---|
Первоначальный выпуск | 19 ноября 1990 г ( 1990-11-19 ) |
Стабильный релиз | 1.11.23 [1] / 8 мая 2008 г. ( 2008-05-08 ) |
Предварительный релиз | 1.12.13 [2] / 28 сентября 2005 г. ( 2005-09-28 ) |
Репозиторий |
|
Написано в | С |
Операционная система | Unix-подобный , Windows |
Тип | Контроль версий |
Лицензия | GPL-1.0 или более поздняя версия [3] |
Веб-сайт | cvs.nongnu.org |
Система параллельных версий ( CVS , Concurrent Versioning System ) — система управления версиями, первоначально разработанная Диком Грюном в июле 1986 года. [4]
CVS работает как front-end для Revision Control System (RCS), более старой системы контроля версий, которая управляет отдельными файлами, но не целыми проектами. Она расширяет RCS, добавляя поддержку отслеживания изменений на уровне репозитория и клиент-серверную модель. [5] Файлы отслеживаются с использованием того же формата истории, что и в RCS, со скрытым каталогом, содержащим соответствующий файл истории для каждого файла в репозитории.
CVS использует дельта-сжатие для эффективного хранения различных версий одного и того же файла. Это хорошо работает с большими текстовыми файлами с небольшими изменениями от одной версии к другой. Обычно это касается файлов исходного кода. С другой стороны, когда CVS сообщается о необходимости сохранения файла в двоичном виде, она будет хранить каждую отдельную версию на сервере. Обычно это используется для нетекстовых файлов, таких как исполняемые образы, где сложно создавать компактные дельты между версиями.
CVS исключает символические ссылки , поскольку при их хранении в системе контроля версий они могут представлять угрозу безопасности. Например, символическая ссылка на конфиденциальный файл может храниться в репозитории, делая конфиденциальный файл доступным, даже если он не зарегистрирован. Вместо символических ссылок в CVS могут быть зарегистрированы скрипты, требующие определенных привилегий и сознательного вмешательства для выполнения. [ необходима цитата ]
CVS маркирует отдельный проект (набор связанных файлов), которым он управляет, как модуль . Сервер CVS хранит модули, которыми он управляет, в своем репозитории . Программисты получают копии модулей, извлекая их . Извлеченные файлы служат рабочей копией , песочницей или рабочей областью . Изменения в рабочей копии отражаются в репозитории путем их фиксации . Обновить — значит получить или объединить изменения в репозитории с рабочей копией.
CVS использует архитектуру клиент-сервер : сервер хранит текущую версию(и) проекта и его историю, а клиенты подключаются к серверу, чтобы «извлечь» полную копию проекта, работать над этой копией, а затем позже «зарегистрировать» свои изменения. Серверы CVS могут разрешать «анонимный доступ на чтение», [6] при котором клиенты могут извлекать и сравнивать версии с пустым или простым опубликованным паролем (например, «anoncvs»); только регистрация изменений требует личной учетной записи и пароля в этих сценариях. Несколько разработчиков могут работать над одним и тем же проектом одновременно, каждый из них редактирует файлы в своей собственной «рабочей копии» проекта и отправляет (или регистрирует ) свои изменения на сервер. Чтобы избежать конфликтов, сервер принимает только изменения, внесенные в самую последнюю версию файла. Поэтому от разработчиков ожидается, что они будут поддерживать свою рабочую копию в актуальном состоянии, регулярно внося изменения других людей. Эта задача в основном выполняется автоматически клиентом CVS, требуя ручного вмешательства только в случае возникновения конфликта редактирования между зарегистрированной модификацией и еще не зарегистрированной локальной версией файла. Клиенты также могут использовать команду «обновить», чтобы обновить свои локальные копии до последней версии на сервере. Клиенты также могут сравнивать версии, запрашивать полную историю изменений или извлекать исторический снимок проекта (например, на основе заданной даты). Если операция регистрации прошла успешно, то номера версий всех задействованных файлов автоматически увеличиваются, и сервер записывает предоставленную пользователем строку описания, дату и имя автора в свои файлы журнала . CVS также может запускать внешние, указанные пользователем сценарии обработки журнала после каждого коммита. Эти сценарии устанавливаются записью в файле CVS loginfo
, которая может инициировать уведомление по электронной почте или преобразовывать данные журнала в веб-формат.
CVS также может поддерживать различные «ветви» проекта. Например, выпущенная версия программного проекта может образовывать одну ветвь, используемую для исправления ошибок, в то время как версия, находящаяся в стадии разработки, с крупными изменениями и новыми функциями, может образовывать отдельную ветвь. CVS предполагает, что большая часть работы выполняется в стволе, и что ветви, как правило, должны быть недолговечными или историческими. При использовании по назначению ветви легко управляются, а операции с ветвями эффективны и быстры. [7] [8]
Серверное программное обеспечение обычно работает на Unix (хотя, по крайней мере, сервер CVSNT также поддерживает различные версии Microsoft Windows ), в то время как клиенты CVS могут работать на любой основной платформе операционной системы .
Грюн вспоминал: [9]
Я создал CVS, чтобы иметь возможность сотрудничать со своими студентами, Эриком Баалбергеном и Маартеном Вааге, над компилятором C ACK ( Amsterdam Compiler Kit ). У нас троих были совершенно разные графики (один студент был постоянным работником с 9 до 5, другой был нерегулярным, и я мог работать над проектом только по вечерам). Их проект продолжался с июля 1984 года по август 1985 года. CVS изначально назывался cmt, по очевидной причине, что он позволял нам фиксировать версии независимо.
Грюн публично опубликовал код 23 июня 1986 года. [10]
Код, который в конечном итоге развился в текущую версию CVS, был создан Брайаном Берлинером в апреле 1989 года, а позднее в него внесли свой вклад Джефф Полк и многие другие участники. Брайан Берлинер написал статью, в которой представил свои усовершенствования программы CVS, в которой описывается, как инструмент был расширен и использовался внутри Prisma, сторонним разработчиком, работающим над ядром SunOS, и был выпущен для сообщества под лицензией GPL. [11] 19 ноября 1990 года версия CVS 1.0 была отправлена в Free Software Foundation для разработки и распространения. [12]
Последняя версия была выпущена 8 мая 2008 года. [13]
В мире программного обеспечения с открытым исходным кодом система параллельного управления версиями (CVS) уже давно является инструментом выбора для управления версиями. И это правильно. CVS сама по себе является свободным программным обеспечением, а ее не ограничивающий modus operandi и поддержка сетевой работы, которая позволяет десяткам географически распределенных программистов делиться своей работой, очень хорошо соответствуют совместной природе мира с открытым исходным кодом. CVS и ее полухаотическая модель разработки стали краеугольными камнями открытого исходного кода. [14]
Со временем разработчики создали новые системы контроля версий на основе CVS, чтобы добавить функции, изменить операционную модель и повысить производительность разработчиков. Проекты замены CVS включают CVSNT и Subversion . [15] [16]