SCV君's LifeLog Space

블로그를 비우겠다고 한 사유는 일요일에 끝났는데, 한주정도 블로그에 글 쓸 소재를 찾지 않으면 다시 글 쓸 소재 찾는데 조금 시간이 걸리더군요.

이런 일도 어떤 관성 같은게 있나봅니다.

근데 역시 하루이틀 사이에 글쓸만한 소재를 찾기가 영 쉽지는 않아서, 전부터 정리하고 싶었던 회사일 관련 내용을 하나 정리할까 하네요.


올해 회사 옮긴 뒤 자리잡고 프로젝트들을 몇개 인수인계 받았는데, 분위기상 예상은 했지만 SVN으로 형상관리를 하고 있더군요.

시간이 흘러 저도 좀 회사에 익숙해졌고, 마침 회사에 불고 있는 변화의 바람(?) 속에 주변 여기저기가 새로운 기술로의 전환을 시도하게 되었고,

그 바람 속에서 형상관리도 SVN 대신 Git으로 하자 마음먹게 되었습니다. 물론 다른 환경도 좀 따라줬지만요.

개인적으론 옮기기 전 회사도 SVN을 메인으로 형상관리를 해 왔기에 '이제야 시대의 흐름을 좀 따라잡는 느낌'도 들고 그랬습니다.


아무튼 그러다 보니, 자연스레 기존 SVN에서의 커밋기록을 유지하면서 Git으로 전환하는 방법이 필요했습니다.

이미 사내에서 먼저 진행해본 분들이 내용을 공유해 주셨지만, 각각의 환경이 달랐기 때문인지 저는 중간중간 막히더군요.

며칠 고생하며 찾은게 아래 내용들입니다. 특히 1번.



본격적으로 들어가기에 앞서, 제 작업환경은 아래와 같습니다.


> SVN

- SVN서버 root에 '프로젝트명' 으로 폴더를 만들고 그 아래에 이클립스 Workspace 구성이 존재

[localhost:8080/testproject/ 하위에 .setting,src,WebContent 등. trunk/branch/tag 폴더 없음]


> Git

- 윈도우용 클라이언트(Git for Windows 사용, 이하 Git Bash)

- 업로드처: GitLab (기반의 사내 자체서버)




-- 목  차 --

누르시면 바로 이동합니다.


1. 커밋 이력을 유지하며 SVN Repository를 Git Repository로 이관

2. Git Repository 신규생성

3. 번외편 - 이클립스에 GitLab 프로젝트 추가하기

4. 참고한 사이트



1. 커밋 이력을 유지하며 SVN Repository를 Git Repository로 이관

- 굳이 SVN의 커밋기록을 모두 Git Repository로 옮기셔야 한다면, 아래 과정도 과정이지만 커밋 양에 따라 전환시간이 꽤 걸릴 수 있습니다.

가능하면 성능 좋은 PC에서 여유롭게 시간을 두고 작업하시기 바랍니다(커밋기록이 많다면 더더욱)



a. 옮길 SVN 소스 준비(새로 CheckOut 받거나 기존 폴더 복사)

- 임의의 경로에 소스를 준비하는 순서입니다.

Git Bash를 실행하고, 편리한 임의의 위치에 폴더를 하나 만듭니다.

그리고 아래 명령어를 사용하여 SVN Repository를 새로 다운로드받거나, 윈도우 탐색기에서 .svn 폴더가 존재하는 폴더 트리 전체를 새로만든 폴더로 복사해옵니다.



이 작업이 끝난 이후부터는 SVN Repository 최상위 폴더에서 아래 b 이후의 명령어들을 실행하셔야 합니다.

최상위 폴더라는 것은 'svn info' 같은 svn 명령어들을 입력했을 때 그 명령어가 작동하는 것으로 구분할 수 있습니다.


추가로, 현재는 SVN Repository 서버가 사라졌더라도 로컬 .svn 에 형상관리 이력이 남은 경우 여기에서 svn info 명령을 사용하여 SVN 정보를 파악해 두면 작업이 가능합니다. SVN URL 봐두시길.


아, 실제로 그렇게 옮긴 자료가 있었습니다.

인수인계 받은 내용도 거의 없었기에 그 기록이라도 남아있어야 했는데 다행히 이력까지 잘 이관되더군요. 참고하시길.



b. 마이그레이션시 사용할 사용자 정보 정리

- SVN의 경우 사용자 아이디로 사용자를 구분하나, Git의 경우 이름과 이메일 주소로 사용자를 구분합니다.

따라서 SVN의 사용자와 Git의 사용자를 매핑시켜줄 필요가 있게 되죠.


이번 단계에서는 SVN Repository 내의 모든 사용자를 긁어와 Git 계정정보를 매핑할 수 있게 템플릿을 생성해 줍니다.



위 명령어가 문제없이 끝나면, SVN Repository 최상위 폴더에 authors.txt 라는 이름으로 파일이 생깁니다.


testuser = KIM GITLAB <sssss@test.com>


의 형식으로 만들어지는데, 오른쪽이 모두 SVN 계정명이 채워져 있을테니 Git 이름과 이메일 주소를 채우고 저장하시면 됩니다.

이 파일은 어디 지워지지 않게 다른데도 복사해서 잘 가지고 계시길. SVN 계정이 격변하지 않는다면 여러 SVN Repository 이관시 유용합니다.

물론 바로 이번 이관과정에서도 써야되지만요.



c. Git 마이그레이션용 임시폴더를 만들고 Git Repository 생성

- 제 경우는 trunk, branch, tag 경로가 없는 상태로 모든 SVN Repository가 만들어져 있었습니다.

그래서 과정 중 git svn clone 명령어를 실행하면 저 폴더들을 찾으며 에러를 발생시키더군요.



이렇게 명령어를 입력한건데, 계속 remote ref '(경로)' must start with 'refs/' 라는 에러가 발생.


이후, Git Repository 전환용 임시폴더를 만들어 작업하는 방법을 발견해 이쪽 방법으로 시도하게 되었습니다.



먼저 SVN 소스를 준비한 폴더와 또 다른 경로에 새 폴더를 만들고(대개 현재 작업폴더 상위 폴더), 이 경로로 이동해 아래 명령어로 Git Repository를 만듭니다.

만약 SVN 서버가 사라진 상태라면, 이 새폴더 안에 .svn 폴더가 있는 폴더 트리 전체를 복사해온 뒤 아래 명령어를 실행하면 됩니다.



자, 빈 Git Repository가 만들어졌습니다.



d. Git 기본정보 셋팅

-방금전 위에서 만든 껍데기 Git Repository에다 필요한 정보를 등록합시다.

사용자 정보(이름, 이메일)나 SVN 마이그레이션용 사용자 매핑정보 파일 위치 같은거 말이죠.



여기까지 하시면 이제 작업 준비는 다 끝난것 같습니다. 슬슬 작업을 해 볼까요.



e. SVN 커밋기록 Git 마이그레이션

- 모든 SVN 커밋기록을 하나하나 불러와 Git Repository에 쌓습니다.



진행과정이 다 나오긴 하지만, 처음부터 하나하나 전환하기 때문에 커밋량이나 작업PC 성능에 따라서 시간이 꽤 걸릴 수 있습니다.

인터넷에서 자료 검색할 때에는 2시간인가 걸려서 전환했다는 분도 계시더군요.



f. push를 위한 작업폴더 생성 후 복사

- e의 작업이 잘 끝났다면, SVN Repository가 모두 로컬 Git Repository에 이관되었습니다.

이제 이 소스를 별도의 Git Repository에 업로드용으로 복사한 뒤 작업하겠습니다.


임의의 다른 폴더(현재 작업폴더 상위 폴더)에 프로젝트명 정도의 적당한 이름으로 폴더를 만든 뒤, 아래 명령어들을 사용하여 Repository를 복사합니다.



여기까지 하시면, 새로 만들어 복사하신 Repository 폴더로 와 계십니다.



g. gitignore 추가

- 여기서 gitignore를 설정하고 가겠습니다.

SVN처럼 형상관리하지 않을 리소스를 설정하는 파일입니다.


기본적으로는 https://www.gitignore.io/ 라는 사이트에서 자동생성시킨 뒤, 제게 필요한 부분을 더하거나 빼면서 추가했습니다.

Windows, Eclipse, Java 로 진행. [이때의 gitignore는 이 링크를 누르시면 바로 나옵니다]


경로는 Git Repository 최상위 폴더 혹은 무시해야 할 파일이 있는 폴더입니다.

저는 최상위 폴더에만 넣고 상대경로로 추가 경로를 지정했습니다.



h. 원격 Repository 정보 추가 후 config 확인

- 이제 원격지 Repository 정보를 추가한 뒤, push할 준비를 할 겁니다.



Remote Repository URL의 경우는 GitLab의 경우 .git으로 끝나더군요. 아무튼.



i. 설정 최종 검토(Git Bash & Text Editor Tool)

- 탐색기에서 지금까지 설정한 Git Repository 경로로 가 봅니다.

Git Bash에서 pwd 를 입력하시면 탐색기에서 확인 가능한 실제 경로를 보실 수 있습니다.


그리로 찾아가시면 흐리게(숨김파일) 되어있는 .git 폴더 안에 config 라는 파일이 있을 겁니다.

이걸 notepad++ 과 같은 텍스트 에디터 툴로 엽니다.

Windows10 Build 1903 이상 버전을 사용중이시라면 윈도우 내장 메모장(notepad)으로 여셔도 됩니다.


[core]

   repositoryformatversion = 0

    filemode = true

    bare = false

    logallrefupdates = true

[branch "master"]

    remote = gitlab

    merge = refs/heads/master

[remote "(설정한 별칭)"]

    url = http://gitlab.example.com/gitlab-group/myrepository.git

    fetch = +refs/heads/*:refs/remotes/gitlab/*


도움말 제작자는 위와 같이 샘플을 업로드했던데, 여기서 제가 빨간색으로 표시한 부분만 눈여겨 보시면 됩니다.

사실상 원격지 정보가 잘 등록되었는지 정도만 확인하시면 되겠습니다.



j. Remote Repository Push

- 그리고 혹시 변경한게 있다면 저장하신 뒤, 원격지 Repository로 Push를 해 줍니다.


GitLab의 경우는 Push 잠금을 풀지 않으면 강제 Push마저도 하지 못하는 현상이 있습니다.


GitLab Project -> Settings -> Repository -> Protected Branches -> Expand

-> Allowed to merge / Allowed to push 권한변경 혹은 하단 주황색 'UnProtected' 버튼 클릭


이 경로의 설정에서 확인 후 Push 진행하시길.



별 이상이 없다면 업로드가 완료되고, 웹사이트 상에서 업로드된 소스를 확인하실 수 있습니다.



2. Git Repository 신규생성

- 회사에서는 형상관리가 되지 않던 소스들도 Git에 올려야 했습니다.

이런것들은 비교적 간단해서 다행이더군요.



a. Git에 Push할 소스 준비

- 적당한 폴더를 하나 만들고, 거기에 업로드할 소스를 위치시킵니다.


제 경우는 이클립스 설정폴더 내 파일들도 가급적 다 업로드 시켰는데, 소스마다 요구하는 JDK가 제한되어야 하는 경우가 있어서 말이죠.

대부분은 JDK1.4(..) 에서 작성됐어도 JDK1.8 환경에 셋팅하고 버전관련 대응(JDBC jar 교체 등)만 조금 해 주면 됐는데,

운영서버에서 JDK1.6으로 돌고 있어서 테스트하려면 그 환경을 맞춰야 된다던가 하는 소스들 때문에 가급적 이런 파일을 남겼습니다.

나중에 다른 담당자에게 인수인계 하기도 편하고 말이죠.



b. Git Repository 신규생성 후 add, commit

- 이제 Git Repository를 새로 만들고, 만든 Repository에 add, commit을 할 차례입니다.



여기까지 하시면 push할 준비는 끝납니다.



c. 사용자 설정(필요시)

- Git Bash 설치 후 한번만 하면 되니, 이 부분은 Git Bash 신규 설치 후 바로 작업하시는 분만 참고하시면 됩니다.

아닌 분은 d로 넘어갑니다.




d. 원격 Repository 정보 추가 후 Push

- 업로드하고자 하는 원격 Repository 정보를 추가합니다.


GitLab의 경우는 Push 잠금을 풀지 않으면 강제 Push마저도 하지 못하는 현상이 있습니다.


GitLab Project -> Settings -> Repository -> Protected Branches -> Expand

-> Allowed to merge / Allowed to push 권한변경 혹은 하단 주황색 'UnProtected' 버튼 클릭


이 경로의 설정에서 확인 후 Push 진행하시길.



별 이상이 없다면 업로드가 완료되고, 웹사이트 상에서 업로드된 소스를 확인하실 수 있습니다.



3. 번외편 - 이클립스에 GitLab 프로젝트 추가하기


EGit 플러그인 튜토리얼에 잘 정리되어 있어 그 페이지를 링크합니다.


EGit Tutorial => https://eclipsesource.com/blogs/tutorials/egit-tutorial/


이 튜토리얼 문서에서 페이지 중간쯤에 있는 'Cloning Repositories' 를 참고하시면 되겠습니다.



4. 참고한 사이트


svn to git conversion: Correct remote ref must start with 'refs/' error

- 1번 글을 적는데 참고했습니다.


GitへSVNから移行時にエラー-Ignoring error from SVN

https://morinohito.site/it/git/git-svn-error

- 위 1-c 에서, 에러난 문장이긴 하지만 뒤쪽 옵션 붙히는데 도움을 받았던 글


[Git] 이클립스에서의 Git 사용법(egit) 3

https://gasaesososo.tistory.com/13?category=726951

- 다른 내용도 유익했지만, gitignore 생성사이트가 있다는 것은 이 글을 보고 알게 되었습니다.


[GitLab] You are not allowed to push code to protected branches on this project

https://ipex.tistory.com/entry/GitLab-You-are-not-allowed-to-push-code-to-protected-branches-on-this-project

- GitLab의 push 권한 변경이 필요하다는 것을 확인시켜준 글입니다


Start a new git repository

https://kbroman.org/github_tutorial/pages/init.html

- 2번의 신규 Git Repository 생성에 관한 도움을 받은 글



이 글 하나 정리하겠다고 크롬 북마크가 지저분했는데, 드디어 깔끔하게 정리할 수 있게 되었습니다. 하하(...)


그럼 저는 조금 빨리 오늘부터 휴일이니, 아마도 연휴나 끝나야 다음 글을 들고 올 수 있을것 같습니다.

그때까지는 미리 추석 연휴 즐겁게 보내시라는 인사 전해드리고 갑니다.


여유롭게 다음 글에서 뵙겠습니다.

Comment 0

Prev 1 ··· 28 29 30 31 32 33 34 35 36 ··· 1387 Next