|
|
Компьютеры - Subversion - Subversion и CVS01 мая 2011
Оглавление: 1. Subversion 2. История 3. Общие сведения 4. Основные концепции 5. Использование Subversion 6. Subversion и CVS 7. Внутренняя структура 8. Недостатки 9. Дополнительное программное обеспечение
Сравнение
Ниже приведено сравнение параметров систем Subversion и CVS, так как Subversion позиционируется именно как улучшение CVS. Приведено сравнение только по тем параметрам, по которым эти системы отличаются. В целом Subversion превосходит CVS по всем параметрам, кроме поддержки меток в общепринятом смысле.
Параметр |
Subversion |
CVS |
Возможности |
Директории |
Отслеживает версии не только файлов, но и директорий. |
Версии директорий не отслеживаются, то есть структура директорий одна и та же для всех ревизий и всех веток. Если изменить структуру директорий, то при извлечении старых состояний получаем правильные ревизии файлов, но в неправильной структуре директорий. |
Транзакции |
Атомарность многофайловых фиксаций. |
Атомарность только на уровне однофайловых фиксаций. Фактически фиксация изменений в нескольких файлах разбивается на последовательность фиксаций изменений отдельных файлов. Если такая последовательность фиксаций прервана, то часть файлов остаётся зафиксированной, часть — не зафиксированной. |
Наборы изменений |
Наборы изменений поддерживаются. |
Наборы изменений не поддерживаются. |
Модификации имён файлов |
Поддерживает копирование, перемещение и переименование файлов и директорий без потери истории изменений. |
При копировании, перемещении и переименовании файлов файл с новым именем не имеет никакой истории, то есть связь со старым именем и его историей версий полностью теряется. То же самое для файлов внутри директории при модификации её имени. |
Свойства |
С каждым файлом и директорией может быть связан произвольный набор свойств, состоящих из названия и значения. Свойства тоже находятся под управлением версиями. |
Свойства не поддерживаются. |
Блокировки |
Поддерживается необязательная блокировка файлов. |
Блокировки не поддерживаются, но есть похожий механизм, называемый слежение. |
Ветви |
Ветви реализованы в пространстве путей. Это значит, что для создания ветви производится копирование директории. Создание таких копий — быстрая и не ресурсоёмкая операция, потому что данные не дублируются, вместо этого фиксируется новая версия, отличающаяся от предыдущей лишь расположением файлов. |
Ветви реализованы в «третьем измерении». Это значит, что файл на ветви адресуется тремя параметрами: путём в файловой системе, ревизией, именем ветви. |
Метки |
Нет меток как таковых. Вместо них используется иерархия директорий — для метки создаётся отдельная директория. Метка — это ветвь, в которой по договорённости больше не делают изменений. Метка является копией помеченного состояния файлов и директорий. |
Метки поддерживаются. Метка адресует помеченное состояние файлов. |
Эффективность |
Клиент-серверный обмен |
При любых обновлениях версий между клиентом и сервером передаются только различия между файлами, что может существенно уменьшить сетевой трафик. |
С сервера к клиенту передаются различия, с клиента на сервер объект передаётся полностью. |
Двоичные файлы |
Одинаково эффективно работает как с текстовыми, так и с двоичными файлами. |
Работа с двоичными файлами менее эффективна: каждая новая версия сохраняется в хранилище полностью. |
Создание ветвей и меток |
Требуется небольшое фиксированное количество времени и дискового пространства. |
Затраты времени велики. Имена ветвей и меток хранятся избыточно. |
Накладные расходы в рабочей копии |
В служебных директориях рабочей копии хранится чистая копия. Поэтому операции просмотра и отката локальных изменений выполняются быстро, однако размер рабочей копии на диске примерно в два раза больше, чем размер самих данных. |
Чистая копия не хранится, размер рабочей копии примерно равен размеру данных. Вследствие этого операции просмотра и отката локальных изменений требуют доступа к хранилищу и выполняются медленно. |
Расход памяти на сервере |
Меньше. |
Больше. |
Миграция с CVS на Subversion
Преобразование репозитория
Существует программа cvs2svn, предназначенная для преобразования репозитория CVS в готовый репозиторий Subversion или в текстовый дамп, который можно затем импортировать в репозиторий при помощи утилиты svnadmin. При этом cvs2svn сохраняет всю информацию, содержащуюся в репозитории CVS: ветви, метки, описания изменений, имена авторов, даты фиксации изменений. Кроме того, изменения в различных файлах, зафиксированные совместно, преобразуются в одну ревизию.
Отличия в использовании
Различия в работе с файлами
В CVS операции по перемещению и копированию файлов и директорий выполняются повторным добавлением объекта с новым именем и удалением старого объекта. При такой работе файлы и каталоги в хранилище создаются заново и теряют историю изменений. В Subversion для выполнения этих операций должны использоваться команды перемещения и копирования. Их использование сохраняет историю изменений и позволяет избежать лишних операций.
В отличие от CVS, некоторые операции в рабочей копии Subversion выполняет самостоятельно. Описанные и другие отличия при работе с файлами рабочей копии просуммированы в следующей таблице:
Операция |
CVS |
Subverson |
Заметки |
Удаление файла |
rm file
cvs rm file |
svn rm file |
файл не нужно предварительно удалять вручную |
Удаление файлов по маске |
rm *
cvs rm file1 file2 ... |
svn rm * |
файлы не нужно предварительно удалять вручную
не нужно перечисления всех файлов |
Переименование/перемещение |
mv file1 file2
cvs rm file1
cvs add file2 |
svn mv file1 file2 |
файл не нужно перемещать вручную
история файла сохраняется |
Копирование |
cp file1 file2
cvs add file2 |
svn copy file1 file2 |
файл не нужно копировать вручную
история файла сохраняется |
Добавление директории |
mkdir dir
cvs add dir |
svn mkdir dir
svn commit |
директорию можно не создавать вручную
после добавления директории необходим commit |
Добавление директории с файлами |
cvs add dir
cd dir
cvs add file1 file2 |
svn add dir |
директория добавляется с содержащимися в ней файлами |
Переименование директории с файлами
|
mkdir dir2
cvs add dir2
mv dir1/* dir2
cvs rm dir1/file1 dir1/file2 ...
cvs add dir2/* |
svn mv dir1 dir2 |
не нужно создавать и добавлять директории
не нужно перемещать файлы вручную
не нужно перечисления всех файлов
история файлов сохраняется |
Переименование ветки файловой системы
|
повторять команды выше
для каждого уровня вложенности
или каждой поддиректории |
svn mv dir1 dir2 |
см. выше
не зависит от количества уровней и директорий |
Адресация состояния хранилища
В Subversion для адресации состояния хранилища не обязательно создавать метки или использовать дату/время, в простых случаях будет проще указать нужный номер ревизии.
Просмотров: 8878
|