Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AlgStr / Библиотека / Разные источники / Контроль версий (Вики).doc
Скачиваний:
30
Добавлен:
23.03.2015
Размер:
549.38 Кб
Скачать

[Править] Слияние [править] Копирование изменений между ветвями

Слияние в Subversion — это применение к ветви набора изменений, сделанных на другой (или той же самой) ветви. Для осуществления слияния необходимо использовать команду svn merge— она применяет набор изменений к рабочей копии; затем нужно зафиксировать внесённые изменения (svn commit).

Терминология, связанная со слиянием, несколько запутана. Термин слияние(англ.merge) является не совсем точным, поскольку как такового объединения ветвей не происходит. Кроме того, не следует отождествлятьслияниеи командуsvn merge: во-первых, для слияния нужно выполнить (помимоsvn merge) разрешение конфликтов и фиксацию, во-вторых, применениеsvn mergeне ограничивается слиянием.

[Править] Другие применения команды svn merge

Команду svn mergeможно использовать не только для слияния. Фактически команда производитвнесение в рабочую копию изменений, равных разнице между двумя директориями или файлами в хранилище, поэтомуsvn mergeявляется универсальным средством для переноса изменений. Можно привести такие примеры использования командыsvn merge:

  • откат уже зафиксированных изменений, в том числе целого диапазона ревизий;

  • удобный просмотр (в виде изменений в рабочей копии) разницы между двумя состояниями репозитория.

[Править] Создание хранилища

Для создания хранилища используется команда svnadmin create. Эта операция создаст пустое хранилище в указанной директории.

[Править] Subversion и cvs [править] Сравнение

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

Параметр

Subversion

CVS

Возможности

Директории

Отслеживает версии не только файлов, но и директорий.

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

Транзакции

Атомарность многофайловых фиксаций.

Атомарность только на уровне однофайловых фиксаций. Фактически фиксация изменений в нескольких файлах разбивается на последовательность фиксаций изменений отдельных файлов. Если такая последовательность фиксаций прервана, то часть файлов остаётся зафиксированной, часть — не зафиксированной.

Наборы изменений

Наборы изменений (англ.changeset) поддерживаются.

Наборы изменений не поддерживаются.

Модификации имён файлов

Поддерживает копирование, перемещение и переименование файлов и директорий без потери истории изменений.

При копировании, перемещении и переименовании файлов файл с новым именем не имеет никакой истории, то есть связь со старым именем и его историей версий полностью теряется. То же самое для файлов внутри директории при модификации её имени[34].

Свойства (properties)

С каждым файлом и директорией может быть связан произвольный набор свойств, состоящих из названия и значения. Свойства тоже находятся под управлением версиями.

Свойства не поддерживаются.

Блокировки

Поддерживается необязательная блокировка файлов (начиная с версии 1.2).

Блокировки не поддерживаются, но есть похожий механизм, называемый слежение.

Ветви

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

Ветви реализованы в «третьем измерении». Это значит, что файл на ветви адресуется тремя параметрами: путёмв файловой системе,ревизией(или другим способом указания ревизии, например, временем),именем ветви.

Метки

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

Метки поддерживаются. Метка адресуетпомеченное состояние файлов.

Эффективность

Клиент-серверный обмен

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

С сервера к клиенту передаются различия, с клиента на сервер объект передаётся полностью.

Двоичные файлы

Одинаково эффективно работает как с текстовыми, так и сдвоичными файлами.

Работа с двоичными файлами менее эффективна: каждая новая версия сохраняется в хранилище полностью.

Создание ветвей и меток

Требуется небольшое фиксированное количество времени и дискового пространства.

Затраты времени велики (зависят от количества задействованных файлов). Имена ветвей и меток хранятся избыточно (во всех задействованных файлах).

Накладные расходы в рабочей копии

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

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

Расход памяти на сервере

Меньше[35].

Больше.