Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - Subversion - Основные концепции01 мая 2011Оглавление: 1. Subversion 2. История 3. Общие сведения 4. Основные концепции 5. Использование Subversion 6. Subversion и CVS 7. Внутренняя структура 8. Недостатки 9. Дополнительное программное обеспечение Файловая системаС точки зрения пользователя хранилище Subversion представляет собой «двумерную» файловую систему. Объекты в хранилище идентифицируются двумя «координатами»: именем и номером ревизии. Другими словами, хранилище представляет собой массив мгновенных снимков дерева файлов и директорий, индексируемый номером ревизии. Каждый такой снимок — обычная файловая система. При необходимости указания на конкретную ревизию объекта используется запись вида: имя@ревизия, например, /main.c@29 — файл /main.c в ревизии 29. Такое указание ревизии, используемое для уточнения имени, называется стержневая ревизия. На рис. 1 показано графическое представление файловой системы: вертикальная ось соответствует множеству имён, горизонтальная — множеству ревизий. Имена файловИмя объекта файловой системы в Subversion образуется по тем же правилам, что и в UNIX-подобных операционных системах: существует только одна корневая директория, элементы пути разделяются косой чертой. Объектами файловой системы являются файлы и директории. Номера ревизийНомер ревизии в Subversion — это натуральное число, адресующее номер состояния хранилища в процессе изменения содержащихся в нём данных. Каждая успешная фиксация изменений порождает ровно одну новую ревизию в хранилище, то есть N-я ревизия — это состояние хранилища после N-й фиксации. В Subversion ревизия характеризует состояние не отдельного файла, а всего хранилища в целом. Например, ревизия 32 — это состояние трёх файлов и двух директорий, существовавших в хранилище на тот момент. Номер ревизии является аналогом времени в том смысле, что меньшие номера ревизий соответствуют более ранним состояниям хранилища, а большие — поздним.
Номер ревизии можно рассматривать как некую временную отметку в истории хранилища. Более того, с каждым номером ревизии связано абсолютное значение времени, когда эта ревизия была сделана. Однако указание номера ревизии удобнее, чем указание времени, так как нет путаницы с часовыми поясами, запись номера короче и номер ревизии не может быть изменён. Оперативная и стержневая ревизииНомер ревизии используется в двух различных контекстах:
Ревизия называется оперативной, если она указывается как ревизия или диапазон ревизий, к которому должна быть применена команда, например: svn log -r 199:230 http://some.path В данном примере выполняется команда svn log для диапазона ревизий Однако, указание только оперативной ревизии иногда может неоднозначно указывать на объекты хранилища. Например, в ситуации, показанной на рис. 2, возникает неоднозначность при выполнении следующей команды: svn log -r 29:33 http://some.path/bar.txt В команде указан диапазон оперативных ревизий, но области, выделенные на рисунке голубым и зелёным фоном, в равной степени можно считать историей файла /bar.txt в диапазоне ревизий 29:33. В подобных случаях необходимо указывать ещё и стержневую ревизию для разрешения неоднозначности. Стержневая ревизия — это номер ревизии, указанный в дополнение к URL объекта файловой системы. URL со стержневой ревизией всегда однозначно идентифицирует объект. Команда применяется к той единственной цепочке состояний, которой принадлежит указанная пара URL@ревизия. В приведённом ниже примере первая команда выведет историю, выделенную на рисунке голубым фоном, а вторая — историю, выделенную зелёным фоном: svn log -r 29:33 http://some.path/file.txt@32 svn log -r 29:33 http://some.path/bar.txt@34 В качестве стержневой ревизии следует указывать как можно более позднее состояние интересующего объекта. Причина этого в том, что цепочка состояний однозначно отслеживается «назад», но не «вперёд». Например, URL со стержневой ревизией http://some.path/foo.txt@31 принадлежит двум цепочкам состояний. Из этих двух цепочек указанный URL адресует серую цепочку, то есть при движении «вперёд» от стержневой ревизии операции копирования игнорируются. Операции над файловой системойНад объектами файловой системы в хранилище Subversion могут быть произведены перечисленные ниже операции. В скобках указано краткое именование операции в обозначениях команды svn status.
Фиксация измененийРабочая копияРабочая копия — это созданная клиентской программой Subversion локальная копия части данных из хранилища, содержащая помимо собственно данных некоторую служебную информацию. Служебная информация необходима для правильного функционирования рабочей копии; что-либо менять в служебных данных нельзя. Минимальной единицей данных, которую можно получить из хранилища как рабочую копию, является директория. Другими словами, в Subversion рабочая копия всегда соответствует ровно одной директории хранилища. Извлечь из хранилища отдельный файл как рабочую копию невозможно. Особенностью Subversion является то, что любая поддиректория рабочей копии также является полноценной рабочей копией, поскольку в каждой директории хранятся её служебные данные. Рабочая копия является самодостаточной в том смысле, что Subversion не хранит каких-либо данных, относящихся к рабочей копии, вне её. Поэтому, имея одну рабочую копию, можно сделать ещё несколько копий простым копированием без затрат сетевого трафика. В служебных директориях рабочей копии, помимо прочего, хранится так называемая чистая копия — файлы рабочей копии в не изменённом виде, как они были извлечены из хранилища. Наличие чистой копии позволяет быстро и без обращения к хранилищу выполнять операции просмотра и отката локальных изменений. Однако размер рабочей копии на диске примерно в два раза больше, чем размер самих данных. Такой подход обусловлен тем, что дисковые ресурсы дешевле и доступнее, чем ресурсы сети передачи данных. Как правило, создание рабочей копии является первым и необходимым этапом для фиксации локальных изменений, поскольку зафиксировать в хранилище можно только изменения, сделанные в рабочей копии. Исключением являются операции, которые могут быть выполнены прямо в хранилище без создания рабочей копии. ТранзакцииРабота с хранилищем в Subversion организована в форме транзакций со свойствами атомарности и изоляции из набора свойств ACID. Таким образом система управления версиями гарантирует целостность, непротиворечивость и доступность хранилища в любой момент времени.
Рабочая копия Subversion, в отличие от хранилища, при сбое может оказаться в промежуточном или заблокированном состоянии. Локальные и удалённые формы командВсе команды клиента Subversion можно разделить на следующие группы:
Структура хранилищаСтруктура проекта в хранилищеФормально Subversion не накладывает каких-либо ограничений на файловую структуру проекта — она может быть какой угодно в рамках правил именования объектов файловой системы. Тем не менее, существуют рекомендации, призванные облегчить работу с ветвями и метками. В простейшем случае в корневой директории хранилища рекомендуется создать как минимум три поддиректории:
где вся файловая структура проекта должна содержаться в поддиректории trunk, поддиректория branches должна содержать ветви проекта, а tags — метки. Например, следующая структура директорий хранилища:
предполагает наличие у проекта одной ветви «branch_1» и двух меток «tag_1» и «tag_2». Каждая из этих директорий содержит копию соответствующей версии проекта. Еслипроектов в хранилище несколько, то такая структура поддиректорий создается для каждогопроекта:
то есть в корневой директории находятся директории проектов, и в каждом из них есть свои trunk, branches, tags, относящиеся только к этому проекту. Описанные структуры директорий хранилища являются лишь примерами, на практике хранилище можно организовать таким способом, который оптимально подходит в данном конкретном случае. Другим способом хранения нескольких проектов является создание нескольких хранилищ. В разных хранилищах следует располагать проекты, которые никак не связаны между собой, поскольку между хранилищами нельзя будет выполнить операции копирования, перемещения и слияния. Несколько хранилищ можно при необходимости объединить в одно с сохранением истории ревизий. ВетвиSubversion использует «файловую» модель для реализации ветвей и меток, то есть ветвь является обычной директорией. Новая ветвь создаётся командой svn copy. Ветвь может быть создана в любой директории хранилища, однако имеет смысл придерживаться описанных выше соглашений о том, где создавать новые ветви. Более подробная информация о ветвях приведена в разделах Ветвление и Слияние. МеткиСоздание метки также производится командой svn copy, то есть технически не отличается от создания ветви. Отличие только в способе использования: предполагается, что никто не будет изменять данные в метке. Например, на рис. 1 метка создана в ревизии 29: директория /trunk из ревизии 27 скопирована под именем /tags/R1. Теперь, если не изменять данные в директории /tags/R1, то она навсегда останется точной копией директории /trunk@27, то есть будет меткой. Концепция меток, используемая в Subversion, отличается от концепции меток в других системах управления версиями. Обычно метка является символическим именем, которое адресует набор файлов и их состояние. В Subversion метка копирует набор файлов и их состояние. Метки-копии в Subversion имеют свои достоинства и недостатки. Достоинства:
Недостатки:
СвойстваОдной из важных возможностей Subversion является поддержка свойств, то есть текстовых пар имя=значение, которые могут быть установлены для объектов в хранилище. Свойства используются в двух различных контекстах: для объектов файловой системы и для ревизий. Свойства объектов файловой системыКаждому файлу или директории в хранилище может быть присвоен набор свойств. Изменения свойств сохраняются в истории так же, как и изменения в файловой системе. Пользователи могут устанавливать свойства с любыми именами; существует также предопределённый набор служебных свойств, которые используются клиентской программой Subversion. Свойства файлов
Свойства директорий
Свойства ревизийВторой тип объектов, для которых существуют свойства, — это сами ревизии. В этом случае имена свойств также могут быть любыми; некоторые свойства с префиксом «svn:» имеют специальное значение. Отличие свойств ревизий от свойств объектов файловой системы в том, что для первых понятие истории версий не применимо. Другими словами, свойства ревизий можно изменить, но старое значение при этом теряется. По умолчанию изменение свойств ревизий запрещено; для разрешения администратор должен создать скрипт обработки события pre-revprop-change.
Как правило, свойства ревизий изменяются только администратором хранилища в целях исправления некорректных данных. Например, если пользователь забыл указать текстовое описание при фиксации своих изменений, то администратор может создать это описание путём редактирования свойства svn:log. Просмотров: 8841
|