Git을 알게 된 후, Subversion 저장소의 불편함

Subversion은 중앙 집중식 버전 관리이다. commit을 하면 서버에 반영된다. git처럼 중앙 서버에 반영하기 전에, 내 컴퓨터 안에서 먼저 버전 관리를 하고 싶었다. 가볍게 branch를 만들고 작업하다 버릴 수도 있고, 제대로 작업을 했다 싶으면 중앙 서버에 반영할 수 있었으면 했다.

나와 비슷한 고민을 하는 사람들이 많았나 보다. git에서 이를 가능하게 git-svn 이라는 명령을 제공한다.

완전한 git처럼 사용할 수는 없지만, 적어도 내가 원한 것들은 가능했다. 그동안 git svn을 이용하면서 경험했던 것을 짧게나마 공유하고자 한다.

Subversion 저장소를 git으로 가져오기

git svn clone 명령을 Subversion 저장소를 내려받는다. 이때, 최신 revision을 지정하여 모든 버전 관리 이력을 받지 않게 한다.

$ git svn clone 저장소 주소 -r HEAD

Subversion에서 무시하던 파일 git에서 무시하기

Subversion에서 무시하고자 하는 파일 목록을 svn:ignore 속성에 기록한다. 이 내용을 보여주는 명령이 git svn show-ignore 명령이다.

$ git svn show-ignore > .gitignore

git처럼 사용하기

git 명령을 이용하여 git을 사용하듯이 사용하면 된다. 다만 git-svn 매뉴얼에 나와 있듯이 다음 2가지만 지키면 된다고 한다.

  1. git 이력을 일직선으로 유지
  2. 별도의 git 저장소 서버를 사용하지 않기

Subversion 저장소에 commit 하기

git svn dcommit 명령을 이용하여 그동안 git에 commit 했던 것을 Subversion 저장소에 반영한다.

$ git svn dcommit

Subversion 저장소의 최신 내용 가져오기

Subversion 저장소에 반영된 최신 내용을 git에 반영하기 위해서 git svn rebase 명령을 사용한다.

$ git svn rebase

commit 또는 최신 내용 가져오기 실패 시

commit 또는 최신 내용 가져올 때, git에 commit이 안 된 작업 중인 파일들이 존재하면 실패한다. 이때 git stash 명령을 이용하면 된다.

git status로 보면 나오는 작업 중인 파일들에 대한 변경 사항을 git stash 명령으로 임시로 보관할 수 있다.

$ git stash

이 명령으로 임시 보관 후, git svn dcommit 또는 git svn rebase 명령을 실행하면 된다. git stash apply 명령으로 임시 보관했던 것을 다시 복구 한다. 그리고 git stash clear 명령으로 임시 보관했던 것을 삭제한다.

$ git stash apply
$ git stash clear

기타

충돌 처리는 아직 미경험

아직까지는 서로 다른 부분을 각자 작업하기 때문에 충돌의 경험이 없다. 충돌 처리 경험을 하게 되면 그 때 다시 글로 남겨보겠다.

파일 이름이 한글일 때

파일 이름이 한글일 때, git svn 명령이 제대로 처리를 하지 못하는 것으로 보인다. git status로 보면 git에서 버전관리가 안되고 있다. 아직 파일 이름이 한글로 된 파일이 작업에 중요하지 않기에 확인하지 않고 무시하고 있다.

Mac OS X 에서만 작업

git svn을 제대로 사용해본 건 Mac OS X 이다. Linux 같은 다른 OS에서는 확인해보지 않았다.

자세한 정보는 매뉴얼 정독으로

주로 사용하던 것들만 짧게 공유하기 때문에 많은 부분에 있어서 궁금하거나, 부족할 것이다. 자세한 정보를 원하시는 분들에게는 매뉴얼을 추천한다.

Comments