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

[Править] Транзакции

Работа с хранилищем в Subversion организована в форме транзакцийсо свойствамиатомарностииизоляциииз набора свойствACID. Таким образом система управления версиями гарантирует целостность, непротиворечивость и доступность хранилища в любой момент времени.

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

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

Рабочая копия Subversion, в отличие от хранилища, при сбое может оказаться в промежуточном или заблокированном состоянии.

[Править] Локальные и удалённые формы команд

Все команды клиента Subversion можно разделить на следующие группы:

  • модифицирующие рабочую копию;

  • модифицирующие хранилище;

  • модифицирующие и рабочую копию, и хранилище;

  • не модифицирующие ничего.

[Править] Структура хранилища [править] Структура проекта в хранилище

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

/.

trunk

branches

tags

где вся файловая структура проекта (основной линии разработки) должна содержаться в поддиректории trunk, поддиректорияbranchesдолжна содержатьветвипроекта, аtags—метки. Например, следующая структура директорий хранилища:

/.

trunk

branches

branch_1

tags

tag_1

tag_2

предполагает наличие у проекта (trunk) одной ветви «branch_1» и двух меток «tag_1» и «tag_2». Каждая из этих директорий (trunk,branch_1,tag_1иtag_2) содержит копию соответствующей версии проекта.

Если (под)проектов в хранилище несколько, то такая структура поддиректорий создается для каждого (под)проекта:

/.

project1

trunk

branches

tags

project2

trunk

branches

tags

то есть в корневой директории находятся директории проектов, и в каждом из них есть свои trunk,branches,tags, относящиеся только к этому проекту. Описанные структуры директорий хранилища являются лишь примерами, на практике хранилище можно организовать таким способом, который оптимально подходит в данном конкретном случае.[28][29]

Другим способом хранения нескольких проектов является создание нескольких хранилищ. В разных хранилищах следует располагать проекты, которые никак не связаны между собой, поскольку между хранилищами нельзя будет выполнить операции копирования, перемещения и слияния. Несколько хранилищ можно при необходимости объединить в одно с сохранением истории ревизий (путём импорта командой svnadmin loadс параметром--parent-dir).