Version control system

Version control system

Система управления версиями (от англ. Version Control System или Revision Control System) — программное обеспечение для облегчения работы с изменяющейся информацией. Система управления версиями позволяет хранить несколько версий одного и того же документа, при необходимости, возвращаться к более ранним версиям, определять, кто и когда сделал то или иное изменение и многое другое.

Такие системы наиболее широко применяются при разработке программного обеспечения, для хранения исходных кодов разрабатываемой программы. Однако, они могут с успехом применяться и в других областях, в которых ведётся работа с большим количеством непрерывно изменяющихся электронных документов, в частности, они всё чаще применяются в САПР, обычно, в составе систем управления данными об изделии (конфигурационного управления (Software Configuration Management Tools).

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

Содержание

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

Ситуация, когда электронный документ за время своего существования претерпевает ряд изменений, достаточно типична. При этом часто бывает важно иметь не только последнюю версию, но и несколько предыдущих. В простейшем случае, можно просто хранить несколько вариантов документа, соответствующим образом их нумеруя. Но такой способ неэффективен (приходится хранить несколько практически идентичных копий), требует много внимания и дисциплины и часто ведёт к ошибкам. Поэтому были разработаны средства для автоматизации этой работы.

Большинство систем управления версиями используют централизованную модель, когда имеется единое хранилище документов, управляемое специальным сервером, который и выполняет бо́льшую часть функций по управлению версиями. Пользователь, работающий с документами, должен сначала получить нужную ему версию документа из хранилища; обычно создаётся локальная копия документа, т. н. «рабочая копия». Может быть получена последняя версия или любая из предыдущих, которая может быть выбрана по номеру версии или дате создания, иногда и по другим признакам. После того, как в документ внесены нужные изменения, новая версия помещается в хранилище. В отличие от простого сохранения файла, предыдущая версия не стирается, а тоже остаётся в хранилище и может быть оттуда получена в любое время. Сервер может использовать т. н. дельта-компрессию - такой способ хранения документов, при котором сохраняются только изменения между последовательными версиями, что позволяет уменьшить объём хранимых данных.

Иногда создание новой версии выполняется незаметно для пользователя (прозрачно), либо прикладной программой, имеющей встроенную поддержку такой функции, либо за счёт использования специальной файловой системы. В этом случае пользователь просто работает с файлом, как обычно, и при сохранении файла автоматически создаётся новая версия.

Часто бывает, что над одним проектом одновременно работают несколько человек. Если два человека изменяют один и тот же файл, то один из них может случайно отменить изменения, сделанные другим. Системы управления версиями отслеживают такие конфликты и предлагают средства их решения. Большинство систем может автоматически объединить (слить) изменения, сделанные разными разработчиками. Однако такое автоматическое объединение изменений, обычно, возможно только для текстовых файлов и при условии, что изменялись разные (непересекающиеся) части этого файла. Такое ограничение связано с тем, что большинство систем управления версиями ориентированы на поддержку процесса разработки программного обеспечения, а исходные коды программ хранятся в текстовых файлах. Если автоматическое объединение выполнить не удалось, система может предложить решить проблему вручную.

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

Многие системы управления версиями предоставляют ряд других возможностей:

  • Позволяют создавать разные варианты одного документа, т. н. ветки, с общей историей изменений до точки ветвления и с разными — после неё.
  • Дают возможность узнать, кто и когда добавил или изменил конкретный набор строк в файле.
  • Ведут журнал изменений, в который пользователи могут записывать пояснения о том, что и почему они изменили в данной версии.
  • Контролируют права доступа пользователей, разрешая или запрещая чтение или изменение данных, в зависимости от того, кто запрашивает это действие.

Распределённые системы управления версиями

Существуют системы управления версиями, которые, вместо традиционной клиент-серверной, используют распределённую модель. Такие системы, в общем случае, не нуждаются в централизованном хранилище: вся история изменения документов хранится на каждом компьютере. Фактически, каждый компьютер, помимо рабочей копии, хранит локальную копию всего хранилища. В некоторых системах рабочая копия сама является хранилищем.

Когда пользователь такой системы выполняет обычные действия, такие как извлечение определённой версии документа, создание новой версии и тому подобное, он работает со своей локальной копией хранилища. По мере внесения изменений, копии, принадлежащие разным разработчикам, начинают различаться и возникает необходимость в их синхронизации. Такая синхронизация может осуществляться с помощью обмена патчами или так называемыми наборами изменений (англ. change sets) между пользователями.

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

Основное преимущество распределённых систем заключается в их гибкости. Каждый разработчик может вести работу независимо, так, как ему удобно, сохраняя промежуточные варианты документов и передавая результаты другим участникам, когда посчитает нужным. При этом обмен наборами изменений может осуществляться по различным схемам. В небольших коллективах участники работы могут обмениваться изменениями по принципу «каждый с каждым», за счет чего отпадает необходимость в создании выделенного сервера. Крупное сообщество, наоборот, может использовать централизованный сервер, с которым синхронизируются копии всех его участников. Возможны и более сложные варианты - например, с созданием групп для работы по отдельным направлениям внутри более крупного проекта.

Словарь

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

branch 
Ветвь — направление разработки, независимое от других. Ветвь представляет собой копию части (как правило, одного каталога) хранилища, в которую можно вносить свои изменения, не влияющие на другие ветви. Документы в разных ветвях имеют одинаковую историю до точки ветвления и разные — после неё.
check-in, commit, submit 
Создание новой версии, публикация изменений. Распространение изменений, сделанных в рабочей копии, на хранилище документов. При этом в хранилище создаётся новая версия изменённых документов.
check-out, clone 
Извлечение документа из хранилища и создание рабочей копии.
conflict 
Конфликт — ситуация, когда несколько пользователей сделали изменения одного и того же участка документа. Конфликт обнаруживается, когда один пользователь опубликовал свои изменения, а второй пытается опубликовать и система сама не может корректно слить конфликтующие изменения. Поскольку программа может быть недостаточно разумна для того чтобы определить, какое изменение является «корректным», второму пользователю нужно самому разрешить конфликт (resolve).
merge, integration 
Слияние — объединение независимых изменений в единую версию документа. Осуществляется, когда два человека изменили один и тот же файл или при переносе изменений из одной ветки в другую.
repository 
Хранилище документов — место, где система управления версиями хранит все документы вместе с историей их изменения и другой служебной информацией.
revision 
Версия документа. Системы управления версиями различают версии по номерам, которые назначаются автоматически.
tag, label 
Метка, которую можно присвоить определённой версии документа. Метка представляет собой символическое имя для группы документов, причем метка описывает не только набор имен файлов, но и ревизию каждого файла.

Ревизии включенных в метку документов могут принадлежать разным моментам времени.

trunk, mainline 
Ствол — основная ветвь разработки проекта. Политика работы со стволом может отличаться от проекта к проекту, но в целом она такова: большинство изменений вносится в ствол; если требуется серьёзное изменение, способное привести к нестабильности, создаётся ветвь, которое сливается со стволом, когда нововведение будет в достаточной мере испытано; перед выпуском очередной версии создаётся «релизная» ветвь, в которую вносятся только исправления.
update, sync 
Синхронизация рабочей копии до некоторого заданного состояния хранилища. Чаще всего это действие означает обновление рабочей копии до самого свежего состояния хранилища. Однако при необходимости можно синхронизировать рабочую копию и к более старому состоянию, чем текущее.
working copy 
Рабочая (локальная) копия документов.

См. также

  • Конфигурационное управление (Software Configuration Management), инструменты конфигурационного управления (Software Configuration Management Tools)
  • Хранилище содержимого
  • Программные продукты с прозрачным управлением версиями
    • Некоторые реализации OpenVMS
    • вики-движков)
  • Распространённые системы управления версиями
    • RCS — устаревшая. Потомок: CVS — устаревшая. Потомок: Subversion
    • Microsoft Visual SourceSafe
    • Rational ClearCase
    • Mercurial
    • TFS (Team Foundation Server)

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Нужно решить контрольную?

Полезное


Смотреть что такое "Version control system" в других словарях:

  • Source Code Control System — (SCCS) was the first source code revision control system. It was originally developed at Bell Labs in 1972 by Marc J. Rochkind for an IBM System/370 computer running OS/MVT. It was later rewritten for UNIX, then running on a PDP 11. Subsequently …   Wikipedia

  • Revision Control System — The Revision Control System (RCS) is a software implementation of revision control that automates the storing, retrieval, logging, identification, and merging of revisions. RCS is useful for text that is revised frequently, for example programs,… …   Wikipedia

  • Tactical Control System — The Tactical Control System (TCS) is a group of protocols that govern the command and control system for unmanned aerial vehicles, UAVs.HistoryDeveloped by EG G Technical Services and Raytheon, starting in 1999, the Tactical Control System is… …   Wikipedia

  • Revision Control System — Le terme général revision control system désigne un logiciel qui administre de multiples révisions d une seule unité d information, habituellement un document contenant du code source. On appelle cela un système de gestion de versions. Le… …   Wikipédia en Français

  • Revision Control System — Para sistemas de control de versiones en general, véase Control de versiones. Revision Control System o RCS es una implementación en software del control de versiones que automatiza las tareas de guardar, recuperar, registrar, identificar y… …   Wikipedia Español

  • Wireless Control System — The Cisco Wireless Control System (Cisco WCS) is a Cisco Wireless LAN Solution network management tool that adds to the capabilities of the Web user interface and the Command Line Interface, moving from an individual controller to a network of… …   Wikipedia

  • Revision Control System — Das Revision Control System (RCS) ist eine Software zur Versionsverwaltung von Dateien auf dem Computer. Es dient speziell bei Textdateien wie Quelltexten, Konfigurationsdateien oder Dokumentationen der Verwaltung und Dokumentation der Änderungen …   Deutsch Wikipedia

  • European Train Control System — Insbesondere im Abschnitt ETCS#ETCS Einführungen ist besonders auffällig, dass die Angaben veraltet sind, aber auch mit dem Suchbegriff Stand findet man schnell die Stellen, an denen nachgebessert werden muss. Lesenswert ist in diesem Zustand in… …   Deutsch Wikipedia

  • Mk 92 Guided Missile Fire Control System — The Mk 92 is part of the combat systems of the Oliver Hazard Perry class frigate. The Mk 92 Fire Control System is a US built medium range anti aircraft missile and gun fire control system. It was developed for the Oliver Hazard Perry class… …   Wikipedia

  • IBM Configuration Management Version Control (CMVC) — IBM Configuration Management Version Control Screenshot  Developer(s) IBM Development status Inactive …   Wikipedia


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»