Как вы уже заметили в «Путешествие во времени вместе с Subversion», номера правок в Subversion — это не более чем целые числа, монотонно возрастающие при каждой фиксации изменений версионированных данных. Пройдет совсем немного времени, и вы уже не сможете точно вспомнить, что произошло в каждой из правок. К счастью, типовая практика работы с Subversion не часто предполагает указание вами конкретных правок, к которым следует применить ту или иную операцию. Для операций, которые требуют обязательной ссылки на конкретную правку, чаще всего указывают номер правки, который известен из сообщения о фиксации, вывода некоторых других операций Subversion или из каких-либо других обстоятельств, которые могли бы дать этот конкретный номер.
Однако, иногда у вас может возникнуть необходимость сослаться на момент времени, для которого у вас уже не осталось в памяти или в записях точного номера правки. Поэтому, кроме целочисленных номеров правок, svn позволяет использовать дополнительные формы обозначения правок — ключевые слова и даты правок.
Замечание | |
---|---|
При указании диапазонов правок можно смешивать различные
способы их обозначения, допустимые в Subversion. Например, вы
можете использовать |
Клиент Subversion понимает ряд
ключевых слов. Эти ключевые слова можно
использовать вместо целочисленных аргументов опции
--revision
, при этом Subversion переведет их в
конкретные номера правок:
Последняя (или «самая новая») правка хранилища
Номер правки элемента в рабочей копии. Если элемент редактировался, то «BASE версия» соответствует тому, как выглядел этот элемент до внесения локальных изменений.
Правка, в которой элемент последний раз изменялся
(предшествующая либо равная BASE
).
Правка, непосредственно предшествующая
той правке, в которой элемент был последний раз изменен.
(То есть, фактически, COMMITTED
- 1.)
Из данного описания можно сделать очевидный вывод о том, что
ключевые слова PREV
, BASE
,
и COMMITTED
могут использоваться только при ссылках
на пути в рабочей копии; они не применимы к URL-адресам хранилища.
Напротив, ключевое слово HEAD
можно использовать
совместно с обоими типами путей.
Ниже приведено несколько примеров использования ключевых слов правок:
$ svn diff --revision PREV:COMMITTED foo.c
# показать последнее изменение, зафиксированное для foo.c
$ svn log --revision HEAD
# показать лог-сообщение для последней фиксации в хранилище
$ svn diff --revision HEAD
# сравнить ваш рабочий файл (с учетом локальных изменений)
# с последней правкой в хранилище
$ svn diff --revision BASE:HEAD foo.c
# сравнить ваш «исходный» foo.c (без учета локальных
# изменений) с последней версией в хранилище
$ svn log --revision BASE:HEAD
# показать все логи фиксаций со времени вашего последнего обновления
$ svn update --revision PREV foo.c
# отменить последние изменения в foo.c, понизив рабочую правку foo.c
$ svn diff -r BASE:14 foo.c
# сравнить неизмененную версию foo.c и версию foo.c в правке 14
Номера правок не несут никакой информации об окружающем мире
за пределами системы управления версиями, тогда как вам иногда
требуется сопоставить момент времени в реальной жизни
с моментом в истории версий. Чтобы помочь вам в этом, опция
--revision
допускает указание даты, которую
заключают в фигурные скобки ({
и
}
). Subversion принимает дату и время в формате,
соответствующем стандарту ISO-8601, а также в некоторых других.
Ниже приведено несколько примеров. (Не забывайте брать в кавычки
любые даты, содержащие пробелы.)
$ svn checkout -r {2006-02-17} $ svn checkout -r {15:30} $ svn checkout -r {15:30:00.200000} $ svn checkout -r {"2006-02-17 15:30"} $ svn checkout -r {"2006-02-17 15:30 +0230"} $ svn checkout -r {2006-02-17T15:30} $ svn checkout -r {2006-02-17T15:30Z} $ svn checkout -r {2006-02-17T15:30-04:00} $ svn checkout -r {20060217T1530} $ svn checkout -r {20060217T1530Z} $ svn checkout -r {20060217T1530-0500} …
Когда вы указываете дату, Subversion находит в хранилище наиболее близкую к ней правку, после чего продолжает работу с вычисленным номером правки.
$ svn log -r {2006-11-28} ------------------------------------------------------------------------ r12 | ira | 2006-11-27 12:31:51 -0600 (Mon, 27 Nov 2006) | 6 lines …
Также вы можете задавать диапазоны дат. Subversion найдет все правки между обеими датами включительно:
$ svn log -r {2006-11-20}:{2006-11-29} …
Внимание | |
---|---|
Временные метки правок сохраняются как их неверсионированные изменяемые свойства (см. «Свойства» ). Исходя из этого, изменением временных меток можно легко исказить истинную хронологию, или даже удалить совсем информацию о времени правки. Это может привести к неожиданным результатам при внутреннем преобразовании дат в номера правок, выполняемом Subversion. |