Команда svn switch трансформирует
существующую рабочую копию в другую ветку. Несмотря на то, что
при работе с ветками эта команда не является крайне необходимой,
она значительно облегчает жизнь пользователям. В ранее приведенном
примере, после создания личной ветки вы создавали новую рабочую
копию созданной директории хранилища. Вместо этого, можно
попросить Subversion изменить рабочую копию
/calc/trunk
так, что бы она отражала
созданную ветку:
$ cd calc $ svn info | grep URL URL: http://svn.example.com/repos/calc/trunk $ svn switch http://svn.example.com/repos/calc/branches/my-calc-branch U integer.c U button.c U Makefile Updated to revision 341. $ svn info | grep URL URL: http://svn.example.com/repos/calc/branches/my-calc-branch
После «переключения» на ветку, рабочая копия не будет отличаться от той которая получилась бы при создании новой рабочей копии директории хранилища. Как правило, более эффективно использовать эту команду, так как обычно у ветки немного отличий. Сервер отправляет минимально необходимый для того, что бы рабочая копия отражала директорию ветки, набор изменений.
Команда svn switch принимает параметр
--revision
(-r
), по-этому
необязательно помещать рабочую копию на самую
«верхушку» ветки.
Конечно, большинство проектов, по сравнению с нашим примером
calc
более сложны, содержат множество
поддиректорий. Обычно пользователи Subversion используют
специальный алгоритм для работы с ветками:
Скопировать всю директорию «trunk» в директорию новой ветки.
Переключить часть главной линии разработки на ветку.
Другими словами, если пользователь знает, что работа над веткой будет проходить в конкретной директории, он может, с помощью, svn switch переключить на ветку только эту поддиректорию. (А иногда на ветку переключается только один рабочий файл!) В этом случае пользователи могут продолжать обычным образом получать обновления «trunk» для большей части рабочей копии, а переключенные части будут оставаться нетронутыми (до тех пор, пока кто-то не изменит этой ветки). Эта возможность добавляет совершенно новое измерение в понятие «смешанная рабочая копия» — рабочая копия может содержать не только смесь рабочих правок но и смесь местоположений в хранилище.
Если рабочая копия содержит какое-то количество переключенных на разные местоположения в хранилище поддиректорий, она будет продолжать нормально функционировать. При обновлении, патчи соответственно будут приниматься для каждой поддиректории. При фиксации, локальные модификации будут приниматься в хранилище в виде единого, атомарного изменения.
Обратите внимание, на то, что хотя и иметь в рабочей копии смесь местоположений в хранилище является нормальным, все эти местоположения должны быть из одного хранилища. Хранилища Subversion пока не могут сообщаться друг с другом; реализация этой возможности запланирована после Subversion 1.0.[28]
Учитывая то, что svn switch в сущности является разновидностью svn update их поведение схоже; при получении новой информации из хранилища, все локальные изменения сохраняются. Это позволяет использовать разнообразные трюки.
Предположим вы внесли некоторые изменения в имеющуюся у вас
рабочую копию /calc/trunk
. После чего неожиданно
обнаружили, что вместо этого вам необходимо внести изменения в ветку.
Нет проблем! Когда вы переключите (svn switch)
рабочую копию на ветку, локальные изменения сохраняться. После чего
их можно проверить и зафиксировать в ветке.
[28] Однако, можно
воспользоваться svn switch с параметром
--relocate
если URL сервера изменился
и вы не хотите бросать существующую рабочую копию. За более
подробной информацией и примерами смотрите раздел, посвященный
svn switch в Глава 9, Полное справочное руководство по Subversion