[SVN] SVN리파지토리 히스토리 git으로 가져와서, 신규SVN 리파지토리에 히스토리 마이그레이션 (dcommit)

[SVN] SVN리파지토리 히스토리 git으로 가져와서, 신규SVN 리파지토리에 히스토리 마이그레이션 (dcommit)

git svn clone 명령어를 이용해서 특정 SVN리파지토리를 로컬에 git형태로 다운로드 받은 상태에서 시작한다.
참고로 dcommit을 하려면 커밋이 한 번 이상 있어야 한다(리비전이 1 이상 있어야 함).

1. 신규 SVN을 준비한다.

ex) svn://127.0.0.1/reponame
cf 1) svn://127.0.0.1/reponame/trunk 폴더 생성 (r1)
cf 2) svn://127.0.0.1/reponame/branches 폴더 생성 (r2)
cf 3) svn://127.0.0.1/reponame/tags 폴더 생성 (r3)


개인적으로 trunk 하위에 프로젝트명으로 새폴더를 생성해서 진행했다.
아래와 같이 폴더 만들고 커밋 (r4)

ex) svn://127.0.0.1/reponame/trunk/projectname


2. 깨끗한 새폴더를 준비한다.
예를 들어 C드라이브 하위에 svn_fix 폴더를 생성.
ex) C:\svn_fix

3. 신규SVN 체크아웃

cd [새폴더명]
git svn init [신규_SVN_주소]/trunk --username [아이디]

ex)
cd C:\svn_fix1
git svn init svn://127.0.0.1/reponame/trunk/projectname --username admin


git svn fetch

위 명령어 실행하면 해시값으로 최신 리비전 값이 나온다.
ex)
r4 = 6a0b3513bd3f5c84dea82145c065a50c119f43af (refs/remotes/git-svn)
Checked out HEAD:
svn://127.0.0.1/reponame/trunk/projectname r4

4. 로컬 git폴더 히스토리 가져오기

git remote add old_repo [기존 git폴더 경로]
ex) git remote add old_repo C:\mygit\projectname

git fetch old_repo
git config --local user.email "test@example.com"
git config --local user.name "test"


git rev-parse refs/remotes/git-svn 쳐본다. => 6a0b3513bd3f5c84dea82145c065a50c119f43af

git cherry-pick [리비전해시값]의 의미는 [리비전해시값]은 이미 있으니 빼고 그 다음부터 master 끝까지 다 가져와라라는 의미다.

git cherry-pick [최신리비전해시값]..old_repo/master
ex) git cherry-pick 6a0b3513bd3f5c84dea82145c065a50c119f43af..old_repo/master

git cherry-pick --skip

git commit --allow-empty --no-edit

git svn dcommit