svn을 사용하는 곳에서 git으로 버전 관리하기
목차
개요
Git은 현재 svn보다 더 많은 기능과 플러그인을 지원하기 때문에 svn에 비해 히스토리 관리도 쉽고 병합, 분기도 더 쉽게 할 수 있다.
그러나 레거시 프로젝트에서는 svn을 주로 사용하고, svn 시스템과 연동하여 사용하고 있는 것 (이슈 트래커 등)들이 많을수록 깃으로 전환하기가 어려울 것이다.
이 때 git-svn을 통해 svn의 히스토리를 git으로 손실 없이 가져와 svn 형상관리를 유지하면서도 git을 통해 히스토리를 살펴보는 등의 기능을 사용할 수 있는 방법을 기술한다.
svn의 모든 기능을 완벽하게 지원하는 것이 아니며 svn의 branch 등의 기능은 git-svn에서 지원하지 않는 것으로 확인되었다.
필요 라이브러리
1
apt-get install git-svn
SVN -> Git
- 디렉토리 생성
1
2
mkdir test
cd test
- Git Init
1
git init
- git svn setting
- git svn init 진행
1
2
3
git svn init svn://<SVN IP>/<SVN PATH> --prefix=origin/ --svn-remote <원하는 이름>
# example ) git svn init svn://svn.iasdf.com/testjenkins --prefix=origin/ --svn-remote jenkins
-
.git/config
열어 파일 수정
<remote branch name>
에 자신의 로컬 브랜치 이름 또는 원하는 브랜치 이름을 넣어준다.
1
2
3
4
5
6
[svn-remote "<원하는 이름>"]
url = svn://<SVN IP>/<SVN PATH>
- fetch = :refs/remotes/origin/git-svn
+ fetch = :refs/remotes/origin/<remote branch name>
# example ) fetch = :refs/remotes/origin/master
- git svn fetch 이 때
--svn-remote
옵션을 준 사람은 해당 옵션값으로 fetch 진행한다.
1
2
3
git svn fetch
git svn fetch <svn remote name>
- rebase 하여 svn에서 가져온 정보를 업데이트한다.
rebase하는 브랜치 명은 .git/config
파일에 넣었던 <remote branch name>
이다.
1
2
3
git rebase remotes/origin/<remote branch name>
# 예시 ) git rebase remotes/origin/master
이후 svn의 정보를 가져올 때에는 fetch와 rebase만 진행하면 된다.
Git의 변경사항을 SVN에 반영
README.md를 수정하였음.
- add
1
git add README.md
- 변경내용 커밋
1
git commit -m "README.md 수정"
-
git svn dcommit
사용
1
git svn dcommit
dcommit 시 변경내용이 반영된다.
만약 git svn fetch를 실행하고 변경 파일 또는 untracked 존재하는 경우 다음과 같은 방법을 사용해본다.
1
git update-index --assume-unchanged <file>
This post is licensed under CC BY 4.0 by the author.