ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SVN에서 git으로 VCS 마이그레이션 하기
    초급 개발자 이야기/노하우 쌓아가기 2015. 8. 14. 18:48

    이 카테고리에는 더 이상 글이 올라오지 않습니다.


    별도의 개발 블로그를 열어 개발에 관련된 이야기는 블로그를 분리하였습니다.

    만약 더 많은 개발 이야기가 보고 싶으시다면 아래 링크로 이동해 주세요.


    link : Digital Blue Eye's dev-ops

    #######################################################################################################



    최근에는 VCS로 git이 많이 사용되고 있습니다.
    git은 협업 도구로써 상당히 유용한 기능들을 제공하고 있는데요.
    이번에는 기존에 SVN에서 git으로 VCS 마이그레이션하는 절차를 한번 살펴보겠습니다.

    아래 내용은 실제로 업무에서 사용하던 모듈을 SVN에서 git으로 이관하는 절차를 담고 있습니다.
    때문에 스크린샷의 일부에는 모자이크가 적용되어 있습니다만, 크게 전체 절차를 전달하는데 문제는 없을 것으로 보입니다.



    SVN을 git으로 마이그레이션하기 위한 단계는 크게 아래와 같습니다.
    1. SVN의 Commiter 정보를 수정한다.
    2. git svn 명령을 이용해 git의 origin에 SVN의 history를 마이그레이션한다.
    3. 마이그레이션된 git repository에서 SVN 관련 내용을 제거한다.


    1. SVN의 Commiter 정보를 수정한다.
    이 단계를 수행하기 위해서 유용한 툴을 하나 사용합니다.
    만약 툴을 사용하지 않길 원하신다면 간단히 텍스트 파일로 Commiter 정보를 작성하셔도 됩니다.
    다만, 이 텍스트 파일은 history를 마이그레이션할 때 참조되기 때문에 빠진 Commiter가 있다면 정상적으로 마이그레이션이 되지 않습니다.

    아래의 url에서 svn-migration-scripts.jar를 다운로드 받습니다.


    어느 위치든 상관없으니 폴더를 하나 생성하시고 다운로드 받은 svn-migration-scripts.jar를 복사해 둡니다.
    (아래 스크린샷에서는 SVN Repository와 연결된 폴더에서 실행하였습니다만 Commiter 정보를 뽑는게 핵심이기 때문에 어디서 실행하든 상관없습니다..)



    이제 svn-migration-scripts.jar를 실행합니다.




    java -jar svn-migration-scripts.jar authors  {SVN_Repository connection url}/repo_csp/trunk/source/astron_v1.2/billing > authors.txt

    위 명령은 SVN Repository의 Commiter 정보를 authors.txt로 추출하는 명령입니다.
    그러면 이 폴더에 authors.txt 파일이 생성됩니다.



    파일을 열어보면 email을 기준으로 id와 email 형태로 텍스트 파일이 정리된 것을 볼 수 있습니다.




    SVN은 통상 계정 기준으로 Commiter 정보를 저장하고 있으며 git은 사용자 이름과 email 정보로 Commiter 정보를 저장하고 있습니다.
    따라서 위의 절차는 SVN의 Commiter 정보를 git의 Commiter 정보 유형으로 변경하는 작업을 수행하기 위함입니다.

    이제 텍스트 파일을 편집합니다.

    SVN계정명 = 사용자이름 <사용자 email>

    위와 같은 포맷으로 편집되어야 합니다.



    편집된 Commiter 정보는 위와 같을 것입니다.
    git svn 명령을 실행하면 위의 SVN계정명을 사용자이름 <사용자 email>로 변경하는 것으로 예상할 수 있습니다.


    2. git svn 명령을 이용해 git의 origin에 SVN의 history를 마이그레이션한다.
    이제 마이그레이션을 위해 git을 clone 받습니다.


    아마도 보통은 위와 같이 빈 Repository가 되겠죠.


    clone 받은 위치에 위에서 생성하고 편집한 authors.txt을 복사합니다.


    그리고 마이그레이션 명령을 입력합니다.

    git svn clone —trunk={SVN 대상 Trunk} —authors-files={Commiter 정보 파일} —prefix=origin/ —no-metadata {SVN Repository url}

    예시) git svn clone --trunk=trunk/source/astron_v1.2/portal_message_lib --authors-file=authors.txt --prefix=origin/ --no-metadata {SVN Repository url}/repo_csp /E/QUARK_VCS_migration/builderlog/repo_quark-portal-message




    명령을 실행하면 아래 스크린샷과 같이 SVN의 리비전 정보를 check 합니다.




    잠시 후 아래 스크린샷과 같이 마이그레이션이 완료됩니다.




    다만, 앞에서도 말씀 드렸듯이 authors.txt에 빠진 Commiter가 있다면 아래와 같이 오류가 발생됩니다.


    위와 같이 Error라고 명시적으로 표기하지 않기 때문에 주의를 기울이지 않는다면 오류가 발생했다고 인지하기 어려울 수 있습니다.


    이제 git을 clone 받았던 폴더를 열어보면 소스가 마이그레이션되어 저장된 것을 볼 수 있습니다.



    3. 마이그레이션된 git repository에서 SVN 관련 내용을 제거한다.
    이제 SVN관련 정보는 필요 없으니 정리해야 합니다.
    우선 .git 폴더로 이동합니다.


    SVN에 대한 정보는 위의 스크린 샷과 같이 svn 폴더, config 파일에 담겨 있습니다.
    svn 폴더는 삭제하면 되며, config 파일은 SVN 정보를 삭제해 주어야 합니다.
    config 파일을 열어봅니다.


    위와 같이 svn에 대한 정보를 삭제하면 이제 소스는 SVN과는 연관이 없는 git으로 관리할 수 있습니다.

    소스를 git으로 Push 합니다.
    저는 일단 git client에서 정상적으로 소스 관리가 되는지 확인해 볼겁니다.
    git client는 Source Tree를 사용합니다.

    Source Tree를 실행하고 마이그레이션된 소스를 열어 봅니다.


    툴의 자세한 사용법은 건너뛰고....
    File > Open을 누른 후 마이그레이션된 폴더를 선택합니다.



    폴더를 열어보면....




    이렇게 소스가 정상적으로 마이그레이션이 된 것을 볼 수 있습니다.
    (위의 스크린샷은 push까지 완료한 사진입니다.)

    이것으로 SVN으로부터 git으로의 마이그레이션 절차를 마무리 합니다.


    댓글

Designed by Tistory.