때로는 작업 사본에 다른 프로젝트, 예를 들어 라이브러리 코드를 포함하고 싶을 때가 있습니다. 이를 처리하는 방법은 최소 4가지가 있습니다.
프로젝트 폴더에 svn:externals 속성을 설정하십시오. 이 속성은 하나 이상의 줄로 구성되며, 각 줄은 공통 코드의 체크아웃 폴더로 사용할 하위 폴더의 이름과 해당 위치로 체크아웃할 저장소 URL을 포함합니다. 자세한 내용은 “외부 항목” 섹션을 참조하십시오.
새 폴더를 커밋하십시오. 이제 업데이트할 때 Subversion은 해당 프로젝트의 복사본을 저장소에서 작업 사본으로 가져옵니다. 필요한 경우 하위 폴더가 자동으로 생성됩니다. 주 작업 사본을 업데이트할 때마다 모든 외부 프로젝트의 최신 버전도 받게 됩니다.
외부 프로젝트가 동일한 저장소에 있는 경우, 주 프로젝트를 커밋할 때 해당 위치에서 변경한 모든 내용이 커밋 목록에 포함됩니다.
외부 프로젝트가 다른 저장소에 있는 경우, 외부 프로젝트에 대한 변경 사항은 주 프로젝트를 커밋할 때 표시되거나 지시되지만, 해당 외부 변경 사항은 별도로 커밋해야 합니다.
설명된 세 가지 방법 중, 이것은 클라이언트 측에서 설정이 필요 없는 유일한 방법입니다. 폴더 속성에 외부 항목이 지정되면, 모든 클라이언트가 업데이트할 때 채워진 폴더를 얻게 됩니다.
공통 코드를 포함할 새 폴더를 프로젝트 내에 생성하되, Subversion에 추가하지 마십시오.
새 폴더에 대해 → 을 선택하고 공통 코드 사본을 해당 폴더로 체크아웃합니다. 이제 주 작업 사본 내에 중첩된 별도의 작업 사본을 갖게 됩니다.
두 작업 사본은 독립적입니다. 부모에 변경 사항을 커밋할 때, 중첩된 WC(작업 사본)에 대한 변경 사항은 무시됩니다. 마찬가지로 부모를 업데이트할 때, 중첩된 WC는 업데이트되지 않습니다.
여러 프로젝트에서 동일한 공통 핵심 코드를 사용하고, 이 코드를 사용하는 모든 프로젝트마다 여러 작업 사본을 유지하고 싶지 않다면, 이 코드를 사용하는 다른 모든 프로젝트와 관련된 별도의 위치로 체크아웃할 수 있습니다. 예를 들어
C:\Projects\Proj1
C:\Projects\Proj2
C:\Projects\Proj3
C:\Projects\Common
공통 코드를 상대 경로(예: ..\..\Common\DSPcore)를 사용하여 참조할 수 있습니다.
프로젝트가 관련 없는 위치에 흩어져 있는 경우, 이 방법의 변형을 사용할 수 있습니다. 즉, 공통 코드를 한 위치에 두고 드라이브 문자 대체(drive letter substitution)를 사용하여 해당 위치를 프로젝트에서 하드 코딩할 수 있는 어떤 것으로 매핑하는 것입니다. 예를 들어, 공통 코드를 D:\Documents\Framework 또는 C:\Documents and Settings\{login}\My Documents\framework로 체크아웃한 다음 다음을 사용하십시오.
SUBST X: "D:\Documents\framework"
소스 코드에서 사용되는 드라이브 매핑을 생성합니다. 그러면 코드는 절대 경로를 사용할 수 있습니다.
#include "X:\superio\superio.h"
이 방법은 전체 PC 환경에서만 작동하며, 팀이 이 알 수 없는 파일들이 어디에 있는지 알 수 있도록 필요한 드라이브 매핑을 문서화해야 합니다. 이 방법은 폐쇄형 개발 환경에서만 엄격하게 사용되며, 일반적인 사용에는 권장되지 않습니다.
아마도 가장 쉬운 방법은 프로젝트를 자신의 프로젝트 작업 사본의 하위 폴더에 단순히 추가하는 것입니다. 하지만 이렇게 하면 이 외부 프로젝트를 수동으로 업데이트하고 업그레이드해야 하는 단점이 있습니다.
업그레이드를 돕기 위해 TortoiseSVN은 탐색기 오른쪽 끌기 컨텍스트 메뉴에 명령을 제공합니다. 외부 라이브러리의 새 버전을 압축 해제한 폴더를 작업 사본의 폴더로 오른쪽으로 끌어다 놓은 다음, → 를 선택하십시오. 그러면 새 파일이 대상 폴더로 복사되고, 새 파일은 자동으로 추가되며, 새 버전에 더 이상 없는 파일은 제거됩니다.