Включить общий подпроект

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

Используя svn:externals

Установите свойство svn:externals для папки в вашем проекте. Это свойство состоит из одной или нескольких строк; каждая строка содержит имя подпапки, которая будет использоваться как папка для извлечения общего кода, и URL-адрес хранилища, из которого будет производиться извлечение. За полным описанием обращайтесь в «Внешние включения».

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

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

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

Из трёх описанных методов, это единственный, не требующий настройки на стороне клиента. Как только внешние ссылки заданы в свойствах папки, у всех клиентов при следующем обновлении папки будут заполнены.

Используя вложенную рабочую копию

Создайте новую папку в вашем проекте, которая будет содержать общий код, но не добавляйте её в Subversion.

Выполните TortoiseSVNSVN Извлечь... на новой папке, и извлеките в неё копию общего кода. Сейчас у вас есть отдельная рабочая копия, вложенная в вашу основную рабочую копию.

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

Используя относительное месторасположение

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

C:\Projects\Proj1
C:\Projects\Proj2
C:\Projects\Proj3
C:\Projects\Common

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

Если ваши проекты разбросаны в несвязанных местах, то вы можете вариант этого, который заключается в следующем, разместите общий код в одном месте и используйте подстановку буквы диска для маппирования, чтобы можно быть прописать явно в ваших проектах. Например, извлеките общий код в D:\Documents\Framework или C:\Documents and Settings\{login}\My Documents\framework, затем используйте

SUBST X: "D:\Documents\framework"
        

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

#include "X:\superio\superio.h"
        

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

Добавить проект в хранилище

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

Чтобы помочь с обновлением TortoiseSVN предоставляет команду в контекстном меню при перетаскивании. Просто перетяните правой кнопкой мыши папку, в которую вы развернули новую версию внешней библиотеки, в папку в вашей рабочей копии, и затем выберите Контекстное менюSVN Ответвление вендора здесь. Эта операция скопирует новые файлы в целевую папку, при этом автоматически будут добавлены новые файлы и удалены файлы, которых нет в новой версии.