Удаление, перемещение и переименование

Subversion позволяет переименовывать и перемещать файлы и папки. Так есть пункты меню для удаления и переименования в подменю TortoiseSVN.

Рисунок 4.32. Контекстное меню Проводника для версированных файлов

Контекстное меню Проводника для версированных файлов


Удаление файлов и папок

Для удаления файлов и папок из Subversion применяется команда TortoiseSVNУдалить.

Когда вы решаете TortoiseSVNУдалить файл или папку, они сразу же удаляются из вашей рабочей копии и помечаются для удаления в хранилище при следующей фиксации. Родительская папка этого элемента отображается с пометкой «изменённый». До тех пор, пока не произведена фиксация, вы можете вернуть файл обратно, если вызовете TortoiseSVNУбрать изменения на родительской папке.

Если вы желаете удалить какой-нибудь объект из хранилища, но в то же время оставить его локально как неверсированный файл/папку, воспользуйтесь Расширенное контекстное менюУдалить (оставив локально). Вам необходимо удерживать клавишу Shift при правом щелчке на объекте в панели со списком файлов Проводника (правая панель) для того, чтобы увидеть этот пункт в расширенном контекстном меню.

Если элемент удаляется в Проводнике, а не при помощи контекстного меню TortoiseSVN, диалог фиксации отобразит такие элементы и позволит вам удалить их также из под управления версиями перед фиксацией. Однако, если вы обновите вашу рабочую копию, Subversion обнаружит отсутствующий элемент и заменит его последней версией из хранилища. Если вам необходимо удалить файл, находящийся под управлением версиями, всегда используйте TortoiseSVNУдалить, чтобы Subversion не приходилось угадывать, что вы хотите сделать на самом деле.

Возвращение назад удалённого файла или папки

Если вы удалили файл или папку и уже зафиксировали эту операцию удаления в хранилище, то обычное TortoiseSVNУбрать изменения не вернет это назад. Но файл или папка не потеряны навсегда. Если вы знаете ревизию в которой был удален файл или папка (если не знаете — найдите в журнале), то откройте обозреватель хранилища и переключитесь на эту ревизию. Затем выберите удаленный файл или папку, нажмите правую кнопку мыши и выберите Context MenuКопировать в...

Перемещение файлов и папок

Если вы желаете просто переименовать (без перемещения) файл или папку , используйте Контекстное менюПереименовать... Введите новое имя переименуемого объекта и это всё.

Если вы хотите переместить файлы внутри вашей рабочей копии, возможно в другую подпапку, воспользуйтесь обработчиком перетагивания правой кнопкой мыши:

  1. выберите файлы или папки, которые вы желаете переместить

  2. затем перетащите правой кнопкой мыши их на новое место внутри рабочей копии

  3. отпустите правую кнопку мыши

  4. в появившемся меню выберите Контекстное менюSVN Переместить версированные файлы сюда

Фиксируйте родительскую папку

Поскольку переименование и перемещение выполняются как удаление с последующим добавлением, вам необходимо выполнить фиксацию родительской папки перемещённого/удалённого файла, так чтобы удаляемая часть переименования/перемещения отображалась в диалоге фиксации. Если вы не зафиксируете удаляемую часть переименования/перемещения, она останется в хранилище и у тех, кто работает вместе с вами, при обновлении старые файлы удалены не будут, т.е. у них окажутся обе копии: и старая, и новая.

Вы должны зафиксировать переименование папки перед изменением любого файла внутри этой папки, иначе ваша рабочая копия может реально прийти в беспорядок.

Другим способом перемещения или копирования файлов является использования команд Windows копировать/вырезать. Выберите файлы, которые вы хотите скопировать, сделайте правый клик и выберите Context MenuКопировать в контекстном меню проводника. Затем перейдите в целевую папку, сделайте правый клик и выберите TortoiseSVNВставить. Для перемещения файлов выберите Context MenuВырезать вместо Context MenuКопировать.

Можно использовать также обозреватель хранилища для перемещения файлов и папок. Чтобы узнать больше о том, как это сделать, прочтите «Обозреватель хранилища».

Не перемещайте внешнее при помощи SVN

Не надо применять команды TortoiseSVN Переместить или Переименовать к папкам, созданным с использованием svn:externals. Это действие приводит к удалению внешних элементов из их родительского хранилища, вероятно вызывая замешательство у множества других людей. Если вам необходимо переместить папку с внешним, то надо использовать обычное перемещение в оболочке (например, Проводнике), а затем настроить свойство svn:externals исходной и целевой родительских папок.

Как справиться с конфликтами из-за регистра символов в именах файлов

В случае, когда у вас в хранилище есть два файла с одинаковыми именами, различающиеся только регистром (например, TEST.TXT и test.txt), вы больше не сможете обновить или извлечь папку, содержащую эти файлы, при помощи клиента под Windows. Хотя Subversion и поддерживает имена файлов, различающиеся регистром, их не поддерживает Windows.

Иногда это случается, когда два человека фиксируют из двух различных рабочих копий файлы, имеющие одинаковые имена, но отличающиеся регистром символов. Это также может случиться при фиксации файлов из ОС, файловая система которой учитывает регистр, такой как Linux.

В этом случае вам необходимо решить, какой из них вы желаете сохранить и удалить (или переименовать) другой из хранилища.

Предотвращение двух одинаковых имён у файлов

По адресу http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/ находится скрипт ловушки для сервера, предотвращающий фиксации, в результате которых возникнут конфликты из-за регистра символов.

Исправление переименования файлов

Иногда ваша дружественная IDE переименовывает для вас файлы в процессе осуществления рефакторинга, и, конечно же, не сообщает об этом Subversion. При попытке зафиксировать изменения, Subversion будет видеть файл со старым именем как отсутствующий, а с новым - как неверсированный. Конечно, вы можете пометить новое имя для того, чтобы оно было добавлено, но тогда будет потеряна история изменений, поскольку Subversion не знает о взаимосвязи двух этих файлов.

Лучший способ - сообщить Subversion о том, что это изменение - на самом деле переименование, и это можно сделать и в диалоге Фиксация, и в диалоге Проверка на наличие изменений. Просто выделите оба имени: старое имя (отсутствующее) и новое имя (неверсированное), и примените Контекстное менюПоправить переименование для обозначения этой пары в качестве переименования.

Удаление неверсированных файлов

Обычно ваш список игнорирования настроен так, чтобы Subversion игнорировала все генерируемые файлы. Но что, если вы желаете очистить все эти игнорируемые элементы для порождения чистой сборки? Как правило, вы настраиваете это в вашем сборочном файле, но если вы отлаживаете сборочный файл, или изменяете систему сборки, полезно иметь способ очистки места действия.

TortoiseSVN предоставляет именно такую возможность, применяя Расширенное контекстное менюУдалить неверсированные элементы.... Вам необходимо удерживать клавишу Shift при правом щелчке на папке в панели со списком Проводника (правой панели) для того, чтобы увидеть этот пункт в расширенном контекстном меню. Это выводит диалог, в котором будут перечислены все неверсированные файлы со всей вашей рабочей копии, и вы сможете отметить или разотметить элементы для удаления.

При удалении такого рода элементов используется корзина, поэтому, если вы совершили ошибку и удалили файл, который должен быть версирован, вы всё ещё можете получить его обратно.