CVS: различия между версиями
[отпатрулированная версия] | [отпатрулированная версия] |
м→Основные концепции:по запросу наВП:ЗКБВ,replaced:→ [[Клиент-сервер| с помощью [[Project:AWB|AWB(7916) |
Добавил вики-ссылку |
||
(не показаны 33 промежуточные версии 25 участников) | |||
Строка 1: | Строка 1: | ||
{{о|системе управления версиями|сети аптек в США|статью [[CVS Health]]}} |
|||
{{Карточка программы | |
|||
{{Карточка программы |
|||
| name = CVS |
|||
| последняя версия = 1.11.23<ref>{{Cite news|title=NEWS 1.11.23|url=https://ftp.gnu.org/non-gnu/cvs/source/stable/1.11.23/NEWS.1.11.23|accessdate=2022-04-14|archivedate=2021-12i |
|||
| logo = |
|||
27|archiveurl=https://web.archive.org/web/20211227003954/http://ftp.gnu.org/non-gnu/cvs/source/stable/1.11.23/NEWS.1.11.23}}</ref> |
|||
| screenshot = |
|||
| дата последней версии = {{start date and age|2008|05|08}} |
|||
| caption = |
|||
| бета-версия = |
|||
| latest_release_version = 1.11.23 |
|||
| дата бета-версии = |
|||
| latest_release_date = {{nobr|[[8 мая]] [[2008 год|2008]]}} |
|||
| programming_language = [[Си (язык программирования)|C]]<ref>[http:// ohloh.net/p/cvs CVS: Concurrent Versions System<!-- Заголовок добавлен ботом -->]</ref> |
|||
| developer = [http://savannah.nongnu.org/project/memberlist.php?detailed=1&group=cvs The CVS Team] |
|||
| operating_system = [[FreeBSD]], {{nobr|[[Linux]]}}, {{nobr|[[Mac OS X]]}}, {{nobr|[[Microsoft Windows]]}} |
|||
| genre = Централизованная [[система управления версиями]] |
|||
| license = [[GNU General Public License|GNU GPL]] |
|||
| website = [http:// nongnu.org/cvs/ nongnu.org/cvs] |
|||
}} |
}} |
||
'''CVS''' (''Concurrent Versions System'', «Система Одновременных Версий») — программный продукт, относящийся к разряду [[Система управления версиями|систем управления версиями]] ({{lang-en|version control system}}). Хранит историю изменений определённого набора файлов, как правило, [[исходный код|исходного кода]] [[Программное обеспечение|программного обеспечения]], и облегчает совместную работу группы людей (часто — [[программист]]ов) над одним проектом. CVS популярна в мире [[Открытое программное обеспечение|открытого ПО]]. Система распространяется на условиях [[лицензия|лицензии]] [[GNU General Public License|GNU GPL]]. |
|||
'''CVS''' ({{lang-en|Concurrent Versions System}} — ''система одновременных версий'') — централизованная [[система управления версиями]], популярная в 1990-е — начале 2000-х годов. Хранит историю изменений определённого набора файлов, как правило, [[исходный код|исходного кода]] [[Программное обеспечение|программного обеспечения]], и облегчает совместную работу группы людей над одним проектом. Распространяется на условиях [[лицензия|лицензии]] [[GNU General Public License|GNU GPL]]. |
|||
В настоящее время активная разработка системы прекращена (последняя версия выпущена в мае [[2008 год]]а), в исходный код вносятся только небольшие исправления<ref>[http://cvs.savannah.gnu.org/viewvc/cvs/ccvs/ChangeLog [sources] Log of /cvs/ccvs/ChangeLog<!-- Заголовок добавлен ботом -->]</ref>. |
|||
Сконца2000-хгодов активная разработка системы прекращена (последняя версия выпущена в мае[[2008 год]]а), в исходный код вносятся только небольшие исправления<ref>[http://cvs.savannah.gnu.org/viewvc/cvs/ccvs/ChangeLog {{Wayback|url=http://cvs.savannah.gnu.org/viewvc/cvs/ccvs/ChangeLog |date=20181116130105 }} [sources] Log of /cvs/ccvs/ChangeLog<!-- Заголовок добавлен ботом -->]</ref>. Считается устаревшей<ref>[http:// redhat /magazine/010aug05/features/subversion/ CVS is out, Subversion is in]{{webarchive|url=https://web.archive.org/web/20100325231953/http:// redhat /magazine/010aug05/features/subversion/ |date=2010-03-25 }}{{ref-en}} Red Hat magazine, август 2005 г.</ref><ref>[https://sourceforge.net/apps/trac/sourceforge/wiki/CVS CVS — sourceforge<!-- Заголовок добавлен ботом -->]{{webarchive|url=https://web.archive.org/web/20100610014449/http://sourceforge.net/apps/trac/sourceforge/wiki/CVS |date=2010-06-10 }}</ref><ref>{{Cite web |url=http:// citforum.ru/programming/application/cvs/|title=CVS — система управления версиями<!-- Заголовок добавлен ботом -->|access-date=2009-07-25|archive-date=2010-07-08|archive-url=https://web.archive.org/web/20100708062202/http:// citforum.ru/programming/application/cvs/|deadlink=no}}</ref>системой. |
|||
== Основные концепции == |
== Основные концепции == |
||
CVS использует архитектуру [[клиент-сервер]]. Обычно клиент и сервер соединяются через [[Локальная вычислительная сеть|локальную сеть]] или через [[Интернет]], но могут работать и на одной машине, если необходимо вести историю версий локального проекта. Серверное ПО обычно работает под управлением [[UNIX|Unix]] (хотя существует CVS-сервер и для [[Windows NT]]), тогда как CVS-клиенты доступны во всех популярных [[операционная система|операционных системах]]. |
|||
Сервер хранит в специальном хранилище ([[репозиторий|репозитории]]) текущие версии проекта и историю изменений, а клиент соединяется с ним, чтобы получить нужную ему версию или записать новую. Получив с сервера нужную версию (<tt>check-out</tt>), клиент создаёт локальную копию проекта (или его части) — так называемую рабочую копию. После того, как в файлы, находящиеся в рабочей копии, внесены необходимые изменения, они пересылаются на сервер (<tt>check-in</tt>). |
|||
CVS использует архитектуру [[клиент-сервер]]. Обычно клиент и сервер соединяются через [[Локальная вычислительная сеть|локальную сеть]] или через [[Интернет]], но могут работать и на одной машине, если необходимо вести историю версий локального проекта. Серверное ПО обычно работает под управлением [[UNIX|Unix]] (хотя существует CVS сервер и для [[Windows NT]]), тогда как CVS клиенты доступны во всех популярных [[операционная система|операционных системах]]. |
|||
Несколько клиентов могут работать над копиями проекта одновременно. Когда они отправляют результаты, сервер пытается объединить вместе их изменения в хранилище. Если это не удаётся, например, в случае, когда два клиента изменили одни и те же строки в определённом файле, сервер не примет изменения от последней операции check-in, и сообщит клиенту о конфликте, который должен быть исправлен вручную. Если операция check-in завершилась успешно, то номера версий всех затронутых файлов автоматически увеличиваются, и сервер записывает комментарий, дату и имя пользователя в свой журнал. |
|||
Сервер хранит в специальном хранилище (''[[репозиторий|репозитории]]'') текущую версию (версии) проекта и историю изменений, а клиент соединяется с ним, чтобы получить нужную ему версию или записать новую. Получив с сервера нужную версию (данная процедура называется ''check-out''), клиент создаёт локальную копию проекта (или его части) — так называемую рабочую копию. После того как в файлы, находящиеся в рабочей копии, внесены необходимые изменения, они пересылаются на сервер (''check-in''). |
|||
Клиенты также могут сравнить различные версии файлов, запросить полную историю изменений или получить исторический образ проекта на определённое число или по номеру версии. Многие [[Открытое программное обеспечение|открытые]] проекты разрешают анонимный доступ на чтение, который впервые был применён в [[OpenBSD]]. Это означает, что клиенты могут запрашивать и сравнивать версии файлов без пароля; только check-in-операции, ведущие к изменению данных в хранилище, требуют пароль. |
|||
Несколько клиентов могут работать над копиями проекта одновременно. Когда они отправляют результаты, сервер пытается слить их изменения в репозитории вместе. Если это не удаётся, например, в случае, когда два клиента изменили одни и те же строки в определённом файле, сервер не примет изменения от последней check-in операции и сообщит клиенту о конфликте, который должен быть исправлен вручную. Если check-in операция завершилась успешно, то номера версий всех затронутых файлов автоматически увеличиваются, и сервер записывает комментарий, дату и имя пользователя в свой журнал (''data logging''). |
|||
Также для синхронизации локальной копии проекта с информацией на сервере клиенты могут использовать команду <tt>update</tt>, что позволяет избежать повторного скачивания всего проекта. |
|||
Клиенты также могут сравнить различные версии файлов, запросить полную историю изменений или получить исторический образ проекта на определённое число или по номеру ревизии. Многие [[Открытое программное обеспечение|Open Source]]-проекты разрешают анонимный доступ на чтение, который впервые был применён в [[OpenBSD]]. Это означает, что клиенты могут запрашивать и сравнивать версии файлов без пароля; только check-in-операции, ведущие к изменению данных в репозитории, требуют пароль. |
|||
CVS также может содержать различные ветви проекта. Например, стабильная версия проекта может составлять одну ветвь ({{lang-en|branch}}), в которую вносятся только исправления ошибок, тогда как активная разработка может вестись в параллельной ветке, которая включает значительные улучшения или изменения с момента выхода стабильной версии. |
|||
Также для [[синхронизация|синхронизации]] локальной копии проекта с информацией на сервере клиенты могут использовать команду ''update'', что позволяет избежать повторного скачивания всего проекта. |
|||
CVS также может содержать различные ''ветки'' проекта. Например, стабильная версия проекта может составлять одну ветвь (''branch''), в которую вносятся только исправления ошибок, тогда как активная разработка может вестись в параллельной ветке, которая включает значительные улучшения или изменения с момента выхода стабильной версии. |
|||
CVS использует механизм [[дельта-кодирование|дельта-компрессии]] для эффективного хранения различных версий одного и того же файла. |
CVS использует механизм [[дельта-кодирование|дельта-компрессии]] для эффективного хранения различных версий одного и того же файла. |
||
== Основные понятия == |
|||
== Терминология == |
|||
Проекты в CVS хранятся в виде модулей, модуль — набор файлов проекта. Сервер CVS может обслуживать несколько модулей; все модули хранятся в репозитории. Локальная копия модуля, полученная с помощью CVS-клиента, называется рабочей копией. |
|||
Операция <tt>check-out</tt> — извлечение целого модуля из CVS и создание рабочей копии; <tt>check-in</tt> — фиксация локальных изменений в репозиторий. Операция <tt>update</tt> — обновление локального проекта из CVS. |
|||
Проекты в CVS хранятся в виде ''модулей''. Модуль — это набор файлов проекта. Сервер CVS может обслуживать несколько модулей; все модули хранятся в ''репозито́рии''. Локальная копия модуля, полученная с помощью CVS клиента, называется ''рабочей копией''. |
|||
Ветвь ({{lang-en|branch}}) — независимое направление модификации проекта, которое может содержать ряд последовательных версий; ветвь может развиваться параллельно другим веткам; главная ветвь ({{lang-en|main trunk}} или <tt>HEAD</tt>) есть всегда. |
|||
;Check-out: извлечение целого модуля из CVS и создание рабочей копии. |
|||
;Check-in: фиксация локальных изменений в репозиторий. |
|||
Ревизия ({{lang-en2|revision}}) — одна из версий отдельного файла. |
|||
;Update: обновление локального проекта из CVS. |
|||
;Branch: «ветка» — независимое направление модификации проекта, которое может содержать ряд последовательных версий. «Ветка» может развиваться параллельно другим веткам. Главная ветка есть всегда. |
|||
Одна из версий целого продукта — «релиз» ({{lang-en2|release}}, термин «версия» в CVS вообще не используется). К версии прикрепляется специальная метка ({{lang-en2|tag}}), метку можно назначить и отдельному файлу, но это делается редко, обычно тегом помечают совокупность файлов определённых ревизий (версий). |
|||
;Main trunk или HEAD: главная ветка. |
|||
;Revision: «ревизия»: одна из версий отдельного файла. |
|||
;Release: «релиз»: одна из версий целого проекта. Термин «версия» вообще не используется. |
|||
;Tag («тег»): специальная метка, обозначающая определённый релиз продукта. Текст метки желательно делать максимально понятным. Метку можно назначить и отдельному файлу, но особого смысла в этом нет. Тег помечает совокупность файлов определённых ревизий (версий). |
|||
== История и статус == |
== История и статус == |
||
CVS является развитием более ранней [[система управления версиями|системы управления версиями]], имеющей название [[Revision Control System]] (RCS), которая всё ещё используется для работы с отдельными файлами, но не целыми проектами. Дик Грун привёл<ref>{{Cite web |url=http:// cs.vu.nl/~dick/CVS.html#History |title=Concurrent Versions System CVS<!-- Заголовок добавлен ботом --> |access-date=2005-01-12 |archive-date=2006-12-07 |archive-url=https://web.archive.org/web/20061207061524/http:// cs.vu.nl/~dick/CVS.html#History |deadlink=no }}</ref> краткие исторические сведения о CVS на своей страничке: |
|||
CVS является развитием более ранней [[система управления версиями|системы управления версиями]], имеющей название [[Revision Control System]] (RCS), которая всё ещё используется для работы с отдельными файлами, но не целыми проектами. Дик Грун привёл<ref>[http:// cs.vu.nl/~dick/CVS.html#History Concurrent Versions System CVS<!-- Заголовок добавлен ботом -->]</ref> краткие исторические сведения о CVS на своей страничке. Вольный перевод части текста: |
|||
<blockquote> |
<blockquote> |
||
CVS был создан для того, чтобы иметь возможность работы с двумя моими студентами над [[Си (язык программирования)|C]] |
CVS был создан для того, чтобы иметь возможность работы с двумя моими студентами над [[Си (язык программирования)|C]]-компилятором ACK ([[Amsterdam Compiler Kit]]). У нас троих был почти несовместимый по времени график (один студент имел постоянное место работы, второй появлялся нерегулярно, а я мог работать над проектом только по вечерам). Их проект длился с июля [[1984 год|1984]] по август [[1985 год|1985]]. CVS изначально назывался ''cmt'', по причине того, что он позволил нам фиксировать версии независимо (от английского ''commit'' — фиксировать, совершать).</blockquote> |
||
Код впервые увидел свет в конференции mod.sources [[23 июня]] [[1986 год]] |
Код впервые увидел свет в конференции mod.sources [[23 июня]] [[1986 год]]а. |
||
Код, который в конце концов приобрёл вид текущей версии CVS, был начат совместно с Брайаном Берлинером в апреле 1989 года, с последующими дополнениями от Джеффа Полка и других участников. Брайан Берлинер написал<ref> |
Код, который в конце концов приобрёл вид текущей версии CVS, был начат совместно с Брайаном Берлинером в апреле 1989 года, с последующими дополнениями от Джеффа Полка и других участников. Брайан Берлинер написал<ref>{{Cite web |url=http://citeseer.ist.psu.edu/berliner90cvs.html|title=CiteSeerX — CVS II: Parallelizing Software Development<!-- Заголовок добавлен ботом -->|access-date=2005-01-12 |archive-date=2007-06-05 |archive-url=https://web.archive.org/web/20070605225452/http://citeseer.ist.psu.edu/berliner90cvs.html |deadlink=no }}</ref> документ, описывающий улучшения программы CVS, которые она успела приобрести за время внутреннего использования в Prisma — стороннем разработчике ядра [[Solaris|SunOS]], после чего Брайан выпустил её на всеобщее обозрение под лицензией [[GNU General Public License|GPL]]. |
||
Проектподдерживаетсягруппойдобровольцев.Примечательно,что версия CVS для [[Microsoft Windows]], отделившаяся в отдельный проект [[CVSNT]], достаточно активно расширяет возможности системы,даже [[портирование ПО|портируя]] изменения обратно на [[Unix]] под именем CVSNT. |
|||
Отношение CVS к проекту GNU может трактоваться неоднозначно: на одной странице сайт GNU распространяет программу как «пакет GNU», а на другой CVS находится в разделе «другой проект под лицензией GPL». На FTP-сервере программа находится в |
Отношение CVS к проекту GNU может трактоваться неоднозначно: на одной странице сайт GNU распространяет программу как «пакет GNU», а на другой CVS находится в разделе «другой проект под лицензией GPL». На FTP-сервере программа находится вкаталоге<tt>/non-gnu/</tt>. |
||
== Недостатки == |
== Недостатки == |
||
* Невозможно переименовать файл или каталог так, чтобы это изменение было отражено в истории. |
|||
* Ограниченная поддержка [[юникод]]а и не-[[ASCII]]-имён. |
|||
* Невозможно переименовать файл или директорию так, чтобы это изменение было отражено в истории. |
|||
* Ограниченная поддержка [[юникод]]а и не-[[ASCII]] имен. |
|||
* Публикации изменений не атомарны. |
* Публикации изменений не атомарны. |
||
* Наборы изменений не поддерживаются. |
* Наборы изменений не поддерживаются. |
||
* Неэффективное хранение |
* Неэффективное хранениедвоичныхфайлов. |
||
* Оригинальный GNU CVS не поддерживает разграничения прав между пользователями репозитория |
* Оригинальный GNU CVS не поддерживает разграничения прав между пользователями репозитория. |
||
* Внутренние механизмы контроля целостности практически отсутствуют, зачастую даже невозможно точно утверждать, повреждён ли репозиторий, и если да, то каким образом<ref>[http://bacher09.org/hgbook/ru/html/how-did-we-get-here.html#idp32357408 Оценка CVS в книге о Mercurial] {{Wayback|url=http://bacher09.org/hgbook/ru/html/how-did-we-get-here.html#idp32357408 |date=20130907081920 }}.</ref>. |
|||
== Инструменты == |
|||
=== Веб-интерфейсы для просмотра репозитория === |
|||
* [http://viewcvs.sourceforge.net/#sec-future viewCVS] |
|||
* [http:// freebsd.org/projects/cvsweb.html webCVS] |
|||
* [http://horde.org/chora/ Chora] |
|||
* [http://codestriker.sourceforge.net/index.html codestriker] |
|||
* [[Bonsai CVS code management system|Bonsai]] |
|||
=== Клиенты, графические оболочки для работы с CVS === |
|||
==== Свободные / Open source ==== |
|||
* Кроссплатформенные |
|||
** [http://cvsgui.sourceforge.net/ CVSGUI] — набор CVS клиентов для Windows, MacOS, Linux (WinCvs, MacCvs и gCvs, соответственно) |
|||
** [http:// lincvs.org/ LinCVS] — многоплатформенная (Linux, другие Unix-like, Windows, Mac OS X) оболочка, написанная с использованием библиотеки [[Qt]] |
|||
** [[Eclipse (среда разработки)|Eclipse]] — кроссплатформенный IDE со встроенной поддержкой CVS |
|||
** [http:// twobarleycorns.net/tkcvs.html TkCVS] — многоплатформенная (Linux, другие Unix-like, Windows, MacOS X) графическая оболочка, написанная на [[интерпретатор|интерпретируемом]] языке [[Tcl]] |
|||
** [[NetBeans IDE]] — кроссплатформенный IDE со встроенной поддержкой CVS |
|||
* Microsoft Windows |
|||
** [http:// tortoisecvs.org/ TortoiseCVS] — вероятно самый простой CVS клиент для Windows |
|||
** [http://cvsgui.sourceforge.net/ WinCVS] |
|||
** [http:// bloodshed.net/ DevC++] — очень популярная IDE c CVS клиентом |
|||
* Linux |
|||
** [http:// kde.org/apps/cervisia/ Cervisia] — (Qt) оболочка к CVS для среды [[KDE]] |
|||
** [http://pharmacy.sourceforge.net/index.html pharmacy] — оболочка для среды [[GNOME]] |
|||
* Solaris/OpenSolaris |
|||
** [[Sun Studio]] IDE |
|||
==== Коммерческие ==== |
|||
* [http:// componentsoftware /products/cvs CS-CVS] CVS клиент для Windows — бесплатен для Open Source разработчиков |
|||
* [http:// cvsnt / CVSNT] |
|||
* [http:// syntevo /smartcvs/index.jsp SmartCVS] |
|||
=== Сервер CVS === |
|||
* [http:// nongnu.org/cvs/ Главный сайт разработчиков CVS] |
|||
=== Прочие инструменты === |
|||
* [[Meld]] — инструмент для работы с изменениями |
|||
* [[StatCvs]] — статистика |
|||
* [http://buildbot.net/ BuildBot] — помогает в управлении проектом; строит и тестирует дерево при поступлении на CVS новых изменений |
|||
* [http:// pushok /soft_cvs.php PushOK CVS SCC proxy] — плагин для [[Microsoft SCC]] |
|||
* [http:// bonevich /boneclipse-master/boneclipse-cvsgrapher/index.html boneclipse-cvsgrapher] — плагин для [[Eclipse (среда разработки)|Eclipse]] |
|||
== Примечания == |
== Примечания == |
||
{{примечания}} |
{{примечания}} |
||
== См. также == |
|||
* [[Система управления версиями]] |
|||
* [[Revision Control System]] — система-предшественник CVS |
|||
== Ссылки == |
== Ссылки == |
||
* [http:// nongnu.org/cvs/ Главный сайт разработчиков CVS] |
|||
* [https://web.archive.org/web/20140425065118/http://squadette.ru/cvs-ru/html_node/cvs-ru_toc.html Документация на русском языке] |
|||
* Документация по CVS |
|||
** [http://squadette.ru/cvs-ru/index.html Документация на русском языке] |
|||
* [http://lib.custis.ru/index.php/CVS:%D0%9A%D1%80%D0%B0%D1%82%D0%BA%D0%BE%D0%B5_%D0%B2%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5 Краткое введение в CVS] (на русском языке). Включает тесты на знание CVS. |
|||
* [http:// citforum.ru/programming/digest/cvsintrorus.shtml Джим Блэнди. Введение в CVS] |
* [http:// citforum.ru/programming/digest/cvsintrorus.shtml Джим Блэнди. Введение в CVS] |
||
* [https:// opennet.ru/docs/RUS/cvs/ CVS — Система управления параллельными версиями] |
|||
{{ |
{{Системы управления версиями}} |
||
{{URI scheme}} |
{{URI scheme}} |
||
[[Категория:Программное обеспечение для |
[[Категория:Программное обеспечение дляmacOS]] |
||
[[Категория:Программное обеспечение для Windows]] |
[[Категория:Программное обеспечение для Windows]] |
||
[[Категория:Программное обеспечение с лицензией GNU GPL]] |
[[Категория:Программное обеспечение с лицензией GNU GPL]] |
||
Строка 140: | Строка 78: | ||
[[Категория:Свободное программное обеспечение, написанное на Си]] |
[[Категория:Свободное программное обеспечение, написанное на Си]] |
||
[[Категория:Свободные системы управления версиями]] |
[[Категория:Свободные системы управления версиями]] |
||
[[ar:نظام النسخ المتلاقية]] |
|||
[[bg:CVS]] |
|||
[[ca:CVS]] |
|||
[[cs:CVS]] |
|||
[[da:Concurrent Versions System]] |
|||
[[de:Concurrent Versions System]] |
|||
[[en:Concurrent Versions System]] |
|||
[[eo:CVS]] |
|||
[[es:CVS]] |
|||
[[et:Concurrent Versions System]] |
|||
[[eu:CVS]] |
|||
[[fr:Concurrent versions system]] |
|||
[[he:CVS]] |
|||
[[it:Concurrent Versions System]] |
|||
[[ja:Concurrent Versions System]] |
|||
[[ko:CVS]] |
|||
[[nl:Concurrent Versions System]] |
|||
[[no:Concurrent Versions System]] |
|||
[[pl:Concurrent Versions System]] |
|||
[[pt:CVS]] |
|||
[[ro:Concurrent Versions System]] |
|||
[[sk:Concurrent Versions System]] |
|||
[[sv:Concurrent versions system]] |
|||
[[uk:Concurrent Versions System]] |
|||
[[vi:CVS]] |
|||
[[zh: Hợp tác phiên bản hệ thống ]] |
Текущая версия от 09:40, 24 июля 2023
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/(англ.) |
CVS(англ.Concurrent Versions System—система одновременных версий) — централизованнаясистема управления версиями,популярная в 1990-е — начале 2000-х годов. Хранит историю изменений определённого набора файлов, как правило,исходного кодапрограммного обеспечения,и облегчает совместную работу группы людей над одним проектом. Распространяется на условияхлицензииGNU GPL.
С конца 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.sources23 июня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.
Ссылки
[править|править код]- Программное обеспечение по алфавиту
- Программное обеспечение, разработанное в 1990 году
- Программное обеспечение для macOS
- Программное обеспечение для Windows
- Программное обеспечение с лицензией GNU GPL
- Программное обеспечение для Linux
- Свободное программное обеспечение, написанное на Си
- Свободные системы управления версиями