Импорт данных в хранилище

Импорт

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

Этот раздел описывает команду Subversion импорт, которая разработана для импортирования в хранилище всей иерархии директории за один раз. Несмотря на то, что эта команда выполняет свою работу, все же есть несколько недостатков:

  • Нет способа выбрать включаемые файлы и папки, кроме как применяя настройки глобального исключения.

  • Импортированная папка не становится рабочей копией. Вы должны выполнить извлечение для копирования файлов обратно с сервера.

  • Можно легко импортировать совсем на не тот уровень папок в хранилище.

По этим причинам мы не рекомендуем вам использовать команду импорта вообще, а вместо этого лучше воспользоваться двухшаговым методом описанным в «Импорт на месте», кроме тех случаев, когда вы создаете простейшую начальную структуру /trunk /tags /branches в своем хранилище. Раз уж вы здесь, то вот как работает простейший импорт ...

Перед тем, как вы импортируете ваш проект в хранилище, вам следует:

  1. Удалить все файлы, которые не нужны для сборки проекта (временные и создаваемые компилятором файлы, такие как *.obj, скомпилированные исполняемые файлы, ...)

  2. Упорядочить файлы в папки и подпапки. Хотя возможно переименовать/переместить файлы и позже, настоятельно рекомендуется, чтобы структура вашего проекта была сформирована перед импортом!

Теперь выберите самую верхнюю папку в структуре папок проекта в Проводнике Windows и сделайте правый щелчок для открытия контекстного меню. Выберите команду TortoiseSVNИмпорт..., которая откроет диалоговое окно:

Рисунок 4.6. Диалог импорта

Диалог импорта


В этом диалоге вы должны ввести URL места в хранилище, в которое вы желаете импортировать проект. Очень важно понять, что сама импортируемая локальная папка в хранилище не появится, только её содержимое. Например, если у вас имеется следующая структура:

C:\Проекты\Widget\source
C:\Проекты\Widget\doc
C:\Проекты\Widget\images
      

и вы импортируете C:\Проекты\Widget в http://mydomain.com/svn/trunk, то вы можете быть удивлены, что ваши подпапки попадут непосредственно в ствол, вместо того, чтобы остаться в подпапке Widget. Вам необходимо указать подпапку как часть URL,http://mydomain.com/svn/trunk/Widget-X. Обратите внимание: команда импорта автоматически создаёт подпапки в хранилище, если они не существуют.

Сообщение импорта используется как сообщение журнала.

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

Как только вы нажмёте ОК, TortoiseSVN импортирует в хранилище полностью всё дерево папок со всеми файлами. Сейчас проект помещён в хранилище под управление версиями. Пожалуйста помните, что та папка, которую вы импортировали, НЕ НАХОДИТСЯ под управлением версиями! Для получения рабочей копии, находящейся под управлением версиями, вы должны произвести извлечение только что импортированной версии. Или продолжайте чтение для того, чтобы узнать как импортировать папку на месте.

Импорт на месте

Предполагая, что хранилище уже у вас есть, и вы желаете добавить в него новую папку со всей её структурой, просто выполните следующие шаги:

  1. Чтобы создать папку нового проекта прямо в хранилище используйте обозреватель хранилища. Если вы используете одну из стандартных схем, то возможно вы захотите создать её как подпапку в trunk нежели в корне хранилища. Обозреватель хранилища показывает его структуру прямо как проводник Windows, так что вы можете видеть как там всё организовано.

  2. Извлеките эту новую папку поверх той папки, которую вы желаете импортировать. Появится предупреждение о том, что локальная папка не пуста. Не обращайте внимания на предупреждение. Теперь у вас есть версированная папка верхнего уровня с неверсированным содержимым.

  3. Воспользуйтесь командой TortoiseSVNДобавить... на новой версированной папке для добавления части или всего содержимого. Вы можете добавлять и убирать файлы, задавать свойства svn:ignore для папок и производить любые другие необходимые вам изменения.

  4. Зафиксируйте папку верхнего уровня, и у вас получится новое версированное дерево и локальная рабочая копия, созданная из вашей существующей папки.

Особые файлы

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

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

Например, вы можете посмотреть на скрипт сборки TortoiseSVN. Он вызывает файл с именем default.build.user, который не существует в хранилище - только default.build.user.tmpl. default.build.user.tmpl - это шаблон файла, который каждый разработчик получает из хранилища и переименовывает его в default.build.user. Внутри этого файла мы поместили комментарии, так что пользователи видят, какие строки они должны отредактировать и изменить в соответствии с их локальными настройками, чтобы это заработало.

И чтобы не сбивать с толку пользователей, мы также добавили файл default.build.user в список игнорирования для его родительской папки, т.е. мы устанавливаем свойство Subversion svn:ignore так, чтобы оно включало это имя файла. Таким образом, оно не показывается как неверсированное при каждой фиксации.