짧은하루

레파지토리(Repository)의 하위 디렉토리를 다른 레파지토리로 분리하기 (commit 내역 보존) 본문

Tools/git, github

레파지토리(Repository)의 하위 디렉토리를 다른 레파지토리로 분리하기 (commit 내역 보존)

짧은하루 2021. 12. 23. 17:43

프로젝트를 하다보면 레파지토리를 분리하고 싶은 때가 생긴다.

그동안 작업 했던 커밋 내역을 살리면서 레포를 분리하는 방법을 알아보자.

 

레파지토리 구조

project 폴더 안에 newcodes 폴더와 oldcodes 폴더가 존재한다.

newcodes 폴더는 남겨놓고 oldcodes 폴더는 다른 레포지토리로 분리하고자 한다.

project/
    newcodes/
    oldcodes/

 

레파지토리 분리하기

1. 새로운 github repository를 만든다.

새로운 레파지토리명은 newrepo로 하였다. 

 

2. 터미널에서 기존 레파지토리로 이동한다.

$ pwd                                                                [11:13:31]
/Users/yurilee/git/project

 

3. subtree를 이용하여 옮길 폴더를 복사한다.

$ git subtree split -P <옮길 폴더 명> -b <브랜치 이름>

나는 oldcodes 폴더를 옮길 예정이고 브랜치명은 splitted라고 임의로 명명했다.

# 예시
$ git subtree split -P oldcodes -b splitted

 

4. 위에서 만든 브랜치를 옮길 디렉토리 만든다.

$ mkdir ../new_repo
$ cd ../new_repo/

 

5. 브랜치 풀 받기

git pull <기존 레파지토리> <브랜치명>
# 예시
$ git pull ../project/ splitted

 

6. 로컬 디렉토리와 원격 디렉토리 연결하기

$ git remote add origin <원격지주소>
$ git remote -v

원격지 주소는 1번에서 만든 레파지토리의 SSH 값을 copy 해서 넣으면 된다. 나는 newrepo라는 레파지토리의 주소를 넣었다.

 

tensorflow github의 ssh 주소 예시. 오른쪽 하단의 네모 두개를 클릭하면 주소가 복사된다.


7. 코드 Push 하기

$ git push origin -u master
또는 
$ git push origin -u main

이렇게 하면 github에 commit 내역을 포함하여 폴더가 복사된다.

나같은 경우에는 newrepo라는 github repository에 oldcodes 폴더가 복사되었다.

 

8. 마무리

코드 복사 후 기존 레파지토리에 해당 폴더가 더이상 필요없다면 삭제하면 된다.

$ cd ../project
$ git rm -rf oldcodes
$ git add .
$ git commit -m "커밋 메세지"
$ git push -u origin master 또는 git push -u origin main
반응형
Comments