[SVN] 커맨드라인으로 저장소 스위치 하기
부제: Repository svn switch in command-line
윈도우에서는 TortoiseSVN이라는 GUI툴이 있어서 쉽게 스위치가 가능하다. Mac에서도 여러 GUI툴이 있지만, 아직 TortoiseSVN같이 안정적인 기능을 가진 툴을 찾지 못했다 (왜 Mac용 TortoiseSVN은 없을까?). 그래서 매번 브랜치를 바꿀일이 있으면 Mac에서는 커맨드라인을 즐겨 쓰곤 한다.
로컬 저장소에 C:\svnrepo 라는 이름을 가진 체크아웃된 폴더가 있다고 하자. 체크아웃된 폴더라면 C:\svnrepo\.svn 이 존재한다. 보이지 않는 경우가 있는데 폴더 옵션에 보기 탭에서 ‘숨김 파일, 폴더 및 드라이브 표시’를 체크한다. (윈도우일 경우 해당)
해당 디렉토리로 이동한다.
> cd svnrepo
체크아웃된 최상위 폴더이므로 여기서 현재 저장소의 svn 정보를 얻어보자.
> svn info
Working Copy Root Path: C:\svnrepo
<b>URL: https://svn.test.com/svn/repo/branch/client</b>
<b>Relative URL: ^/branch/client</b>
Repository Root: https://svn.test.com/svn/repo
Repository UUID: aaaa-bbb-cccc-dddd-efefefef
Revision: 10001
Node Kind: directory
Schedule: normal
Last Changed Author: meme
Last Changed Rev: 10001
Last Changed Date: 2018-11-06 14:49:09 +0900
대략 위와 같은 정보를 얻을 수 있다. 여기서 찾고자 하는 정보는 저장소의 주소이다. URL이 있는데 (URL: https://svn.test.com/svn/repo/branch/client) 이 정보를 가지고 다른 저장소의 주소를 찾아보자.
> svn ls https://svn.test.com/svn/repo/branch/
client/
client2/
client3/
위와 같이 svn 저장소내에 branch안에 폴더 리스트를 svn ls를 통해 얻을 수 있다. 하지만 주소가 보통 길어서 불편할 수가 있는데, 이때 사용하는 것이 Relative URL이다.
> svn ls ^/branch
client/
client2/
client3/
캐럿(^)을 이용하여 상대 경로를 만들면, Repository Root를 제외하고도 같은 결과를 얻을 수 있다. (Relative URL 정보는 svn 버젼 1.8 이상 부터 제공된다.)
그럼 client2로 switch를 하고자 한다면,
> svn switch ^/branch/client2 .
‘.’ 은 디렉토리 패스를 현재 디렉토리로 지정한 것이다.
참고로, switch시에 –relocate 옵션을 같이 쓰는 글들이 있는데 이것은 URL이 변경됐을 시에만 적용해야하는 옵션이므로, Repository Root URL이 변경되지 않았다면 쓸 필요가 없다. 끝.