Tag Archive for '.svn'

Code sharing using svn:externals property

서브버전으로 각종 프로젝트를 진행하다보면 여러가지의 오픈소스들을 활용해야 할 때가 있는데 그럴때 외부 저장소에 있는 오픈소스 프로젝트를 현재 작업하고 있는 저장소에 포함시키면 상당히 효율적으로 외부라이브러리를 관리할 수 있다.

다시말해 진행하려는 프로젝트 저장소를 생성하고 그 저장소에 Papervision 이라든지 Away3D 와 같은 외부 저장소의 소스를 연결할 수 있다는 의미이다. 이렇게 되면 현재 저장소에 외부 오픈소스가 귀속되어 실제 버전관리가 이루어지지 않는 맹점을 해결할 수 있다.

서브버전 디렉토리 속성중에 svn:externals 이라는 것이 있는데 이것을 이용하면 현재 저장소에 다른 저장소의 내용을 포함시킬 수가 있다.
svn_repository
위와 같이 외부저장소에서 가져온 라이브러리는 독립적인 버전관리가 이루어지며 한 저장소 안에서 여러개의 서로다른 저장소의 라이브러리를 가져와 연결할 수 있다.

아래 설명은 eclipse 기반의 서브버전 플러그인인 Subclipse 를 작업기준으로 한다.
우선 SVN 프로젝트를 생성하고 속성을 설정하고자 하는 폴더에서 마우스 우클릭을 하여
아래와 같이 Team –> Set Property… 메뉴를 클릭한다.

svn_property1

그러면 다음과 같은 svn 속성 설정창이 뜨는데  Property name 으로 svn:externals 을 선택하고  Property content (value)값을 다음과 같은 정의로 입력해준다.

svn:externals [저장할 디렉토리](-r 리비전번호)[외부저장소의 URL]

lib/pv -r 873 http://papervision3d.googlecode.com/svn/trunk/as3/turnk/src

Property content (value) 정의는 크게 두부분으로 구성되는데 처음부분은 외부저장소 파일이 저장될 프로젝트의 디렉토리 이름이고 두번째는 외부저장소의 URL 로 이루어진다. 그리고 외부저장소에서 원하는 리비전번호의 파일을 제한적으로 연결할 수 있는데 이는 외부저장소의 뜻하지 않은 변경사항에 현재 적용하고 있는 프로젝트와의 충돌이나 오류를 막아준다. 이는 옵션사항이니 항상 최신버전을 가져오려면 생략하면 된다. 또한 여러개의 저장소를 가져올 경우 위와 같은 형식으로 각각의 다른 라인으로 작성하면 현재 프로젝트에서 여러개의 서로다른 외부저장소를 연결하여 사용할 수 있다.

입력이 끝났으면 업데이트를 실행해보자. 그러면 외부저장소의 파일들을 프로젝트내로 가져올것이다. 그리고 변경사항에 대해 커밋을 한다.
여기서 중요한 사실은, 커밋한다고 해서 현재 프로젝트에서 업데이트 되었던 외부저장소의 파일들이 저장소에 모두 커밋되는것이 아니다. 저장소를 확인해보면 알 수 있듯이 서버상에는 svn 속성값만 변경되었을 뿐 어떠한 외부저장소의 폴더가 반영된 것을 볼 수 없을 것이다.

또한, 현재 프로젝트에서 외부저장소를 포함한 모든 작업파일에 대한 변경사항을 커밋할 때 만약 외부 저장소의 파일을 직접 변경했다고 하더라도 자동으로 외부저장소의 파일을 커밋하지 않는다는 것이다. 외부저장소의 변경을 커밋하고 싶으면 해당 외부디렉토리로 직접가서 커밋을 직접해줘야한다.

Remove SVN Folders(Shell scripting)

요즘들어  상당 수의 플래시 오픈소스 개발로 인해 버전관리 프로그램을 많이들 사용하고 있다.

버전관리의 효율적인 측면에서는 인정하지만 최종소스을 공유할 시 각 폴더에 들어있는 .svn 폴더로 인해 상당히 괴로울(?) 때가 있을 것이다.

물론  대표적인 Subversion 윈도우용 쉘프로그램인 TortoiseSVN 에서는 최종소스를 익스포트할 수 있게 해주는 기능이 존재하지만 이 기능은 해당 SVN 시스템에 귀속된 채 관리되는 것이라 만약 내부의 .svn 폴더가 임의로 삭제되었거나 변경이 되었을시 익스포트를 못 할 경우도 있다.

하지만 아래와 같이 shell script 를 이용하여 레지스트리를 편집하면  전혀 SVN 프로그램에 영향받지 않고서도 손쉽게 .svn 폴더를 삭제할 수 있게된다.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN]
@=”Delete SVN Folders”

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN\command]
@=”cmd.exe /c \”TITLE Removing SVN Folders in %1 && COLOR 9A && FOR /r \”%1\” %%f IN (.svn) DO RD /s /q \”%%f\” \”"

사용방법은

1. 임의의 텍스트 파일을 생성한다.
2. 위 스크립트를 복사하여 붙여넣기를 한다.
3. 파일명을 deleteSvn.reg 로 변경한다. (파일이름은 상관없다 단, 확장자는 reg)
4. 생성한 reg 파일을 더블클릭하여 레지스트리에 등록한다.

위 과정을 거친후에  .svn 을 포함하고 있는 폴더에 마우스를 가져다가 우클릭을 하면
‘Delete SVN Folders’ 라는 새로운 메뉴가 보일 것이다.
이 명령을 실행하면 그 폴더를 포함하여 자식폴더까지 모든 .svn 폴더가 삭제될 것이다.

단, 주의사항은 반드시 .svn 폴더를 제거하려고 하는 소스의 복사본으로 실행을 해야한다는 것이다.
그렇지 않으면 원본 svn 폴더가 삭제될 것이다.

download registry file

reference from article below
http://weblogs.asp.net/jgalloway/archive/2007/02/24/shell-command-remove-svn-folders.aspx