※ 이 글은 SourceTree, svn, git의 기본적인 사용법을 알고 있다고 가정합니다.

svn에서 git으로의 이전Migration은 git 자체적으로 지원하고 있다. 모든 로그와 브랜치, 태그 등을 보존하면서 자연스럽게 git으로 갈 수 있을 뿐 아니라 git 클라이언트Client 및 지역 저장소Local Repository만 git을 사용하고 원격 저장소Remote Repository는 기존의 svn 서버를 그대로 사용하게 할 수도 있다. 하지만 이전 작업을 처음 해본다면 생각보다 구멍이 몇 개 생길 수 있어 이 글로 정리해보았다. 윈도우즈 환경에서 git 클라이언트로 소스트리SourceTree를 사용했다.

git이 자체적으로 이전 기능을 지원하지만 자주 사용되는 기능이 아니므로 소스트리도 메뉴를 통해 해당 기능을 지원하지는 않는다. 대신 이런 기능들을 터미널을 통해 직접 실행할 수 있다.

image

터미널을 띄우면 현재 디렉토리 위치를 잘 봐두어야 한다. 나중에 이전이 끝난 결과물이 전혀 엉뚱한 폴더에 들어있다면 현재 디렉토리 위치를 몰라서 그랬을 가능성이 높다.

image

내장 기능은 다음과 같이 사용한다. (git-svn 사용법 참고 링크) 역슬래시는 제대로 처리하지 못하므로 디렉토리 구분은 슬러시로 해준다. 그리고 절대경로를 사용하는 것이 나중에 헤매지 않는 방법이다.

image

git svn clone {svn src url} {destination path} [Option]

여기서 위에 예제로 사용한 저장소는 svn 서버가 기본적으로 생성해주는 trunk, branches, tags 폴더가 없는 녀석들이다. 만약 해당 폴더가 있는 저장소라면 다음과 같은 옵션이 추가로 필요하다. (위의 사용법 링크를 참고하면 좋다)

git svn clone {svn src url} {destination path} –T trunk –b branches –t tags
(-T trunk –b branches –t tags 옵션은 –s 옵션 하나로 대체 가능)

수행한 화면은 다음과 같다.

image

소스트리에서 생성된 지역 저장소를 열어 잘 되어 있는지 확인해보았다.

image

원격 저장소 정보에 Subversion이 자동으로 설정되어 있고 로그들도 아주 잘 살아있음을 볼 수 있다. 하지만 우리는 svn을 버리고 git으로 가는 중이므로 원격 정보에서 Subversion을 지우고 새 원격 저장소를 설정하고 싶을 것이다. 새 원격 저장소는 위의 GUI 중 원격에서 우클릭을 하면 새 원격 저장소에 대해 정보를 설정할 수 있다. 하지만 기존 Subversion 원격 정보를 제거하는 것은, 아래와 같이 생각보다 잘 안 될 수가 있는데,

image

이를 수동으로 지워주려면 설정 파일을 직접 편집해주어야 한다. (새 원격… 메뉴에서 설정 파일 편집을 누르거나 지역 저장소 폴더의 git 설정 폴더로 들어가 config 파일을 메모장 등으로 열어주면 된다. (여기서는 C:\Test\.git\config)

다음과 같은 내용을 보았다면 무엇을 지워줘야 하는지는 명확할 것이다. 아래 내용 말고도 추가로 지워줘야할 것이 몇 개 더 있다. (실제 [svn-remote… 부분을 제거하더라도 소스트리는 여전히 Subversion 원격 저장소를 표시한다)

image

지역 저장소의 git 설정 폴더(여기서는 C:\Test\.git)로 들어가 svn 폴더를 지워준다. 또한 refs\remotes 폴더로 들어가면 git-svn 이라는 파일도 있는데 이것도 지워준다.

image

image

그럼 이제 소스트리의 원격 정보는 깨끗해졌다.

image

그런데 아직 끝나지 않았다. 다음과 같이 원격을 추가하고 푸시를 통해 지역 저장소에 있던 내용을 원격 저장소로 올렸는데, 우리가 평소에 보던 HEAD 브랜치가 없다! HEAD는 일반적인 브랜치와는 달리 (보통) master 브랜치에 대한 참조 브랜치라서 별도 조작이 필요하다. 다음과 같이 원격이 설정되었다면 git 설정 폴더 밑에 refs\remotes 폴더로 가보면 origin 폴더가 생기고 그 밑에 master 파일이 생겼음을 볼 수 있다.

image

image

새 파일을 생성해서 파일명을 HEAD로 해주고 다음과 같이 내용을 입력한다.

image

아마도 모든 설정은 완료되었을 것이다.

image

Posted by OOJJRS
,