회사 내에서 SVN 을 GIT 으로 이전할 때 정리하여 작성했던 내용입니다.

GIT 저장소 준비

$ git clone <git저장소주소> <폴더이름>

SVN 으로부터 Clone

$ git svn clone <svn저장소주소> <위의폴더이름> -s
# ex) git svn clone svn://svn.somehost.com/some_repo some_repo_folder -s
  • rev-parse --git-path svn: command returned error: 127 오류날 경우
    • git 저장소 폴더로 들어가서 아래 명령어를 실행한다.
$ git svn gc

다시 clone 명령어 실행해서 이어서 진행한다.

브랜치 확인

로컬, 원격 저장소에 모두 다 제대로 불러왔는지 확인한다.

$ git branch -a

trunk 로 내용 가져오기

$ git checkout trunk
$ git pull origin master --allow-unrelated-histories

무시할 파일 목록 가져오기

$ git svn show-ignore > .gitignore

SVN 저장소 관련 정보 제거

$ cd .git
$ vi config

SVN 저장소 주소가 있는 관련 정보를 제거한다.

파일 커밋

# 저장소 root에서 진행
$ git add .
$ git commit -m "init commit"

TRUNK 병합 후 Push

$ git checkout master
$ git merge trunk
$ git push origin master
더보기

(Submodule 필요 시) 서브 모듈 추가

서브 모듈 추가할 때 SSH 방식이 아닌 HTTPS 방식의 주소로 추가한다.

$ git submodule add https://gitlab.somehost.com/some-group/some-submodule-repo.git ./some-submodule-repo

그러면 .gitmodules 파일이 추가되는데 https 경로가 아닌 상대 경로를 지정해준다.

# 아래의 url 같이 상대 경로로 변경해주자
[submodule "some-submodule-repo"]
        path = some-submodule-repo
        url = ../../some-group/some-submodule-repo.git

 

https://docs.gitlab.com/ee/ci/git_submodules.html#configuring-the-gitmodules-file

Submodule을 이용하기 위해서는 심볼릭 링크을 만들어서 이용해야 하는데 만들 때 반드시 절대 경로가 아닌 상대 경로로 연결을 해주어야 한다.

SVN 에서 external 연결된 경우들이 있는데 이 항목들을 참고해서 심볼릭 링크를 연결한다.

$ ln -s <원본파일 또는 디렉토리> <심볼릭 링크 이름>

그리고 커밋을 해주고 push를 해준다.

# 저장소 root에서 진행
$ git add .
$ git commit -m "add submodule external files"
$ git push origin master