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

[Править] Номера ревизий

Номер ревизии в Subversion — это натуральное число(или 0 для самой первой ревизии), адресующее номер состояния хранилища в процессе изменения содержащихся в нём данных. Каждая успешная фиксация изменений порождает ровно одну новую ревизию в хранилище, то естьN-я ревизия — это состояние хранилища послеN-й фиксации.

В Subversion ревизия характеризует состояние не отдельного файла, а всего хранилища в целом. Например, ревизия 32 (обведено пунктиром на рисунке) — это состояние трёх файлов и двух директорий, существовавших в хранилище на тот момент.

Номер ревизии является аналогом временив том смысле, что меньшие номера ревизий соответствуют более ранним состояниям хранилища, а бо́льшие — поздним.

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

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

Номер ревизии можно рассматривать как некую временну́ю отметку в истории хранилища. Более того, с каждым номером ревизии связано абсолютное значение времени, когда эта ревизия была сделана (свойствоsvn:date). Однако указание номера ревизии удобнее, чем указание времени, так как нет путаницы с часовыми поясами, запись номера короче и номер ревизии не может быть изменён.

[Править] Оперативная и стержневая ревизии

Рис. 2

. Указание стержневой ревизии

Номер ревизии используется в двух различных контекстах:

  • оперативнойревизии (англ.operative revision);

  • стержневойревизии (англ.peg revision).

Ревизия называется оперативной, если она указывается как ревизия или диапазон ревизий, к которому должна быть применена команда, например:

svn log -r 199:230 http://some.path

В данном примере выполняется команда svn logдля диапазона ревизий199:230, который и является диапазономоперативныхревизий.

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

svn log -r 29:33 http://some.path/bar.txt

В команде указан диапазон оперативных ревизий (29:33), но области, выделенные на рисунке голубым и зелёным фоном, в равной степени можно считать историей файла/bar.txtв диапазоне ревизий29:33. В подобных случаях необходимо указывать ещё истержневуюревизию для разрешения неоднозначности. Стержневая ревизия — это номер ревизии, указанный в дополнение кURLобъекта файловой системы (используется запись вида «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 адресует серую цепочку, то есть при движении «вперёд» от стержневой ревизии операции копирования игнорируются.