[Git / Github] 여러 Repository를 합치고 싶다면?

Hocaron·2022년 1월 23일
0

Git / Github

목록 보기
1/2

NestJS를 공부하면서, 각각 다른 레포지토리에 만들었던 프로젝트들을 하나의 레포지토리에 폴더로 나눠서 정리해놓고 싶었다.

  • 스프링은 처음부터 폴더를 나눠서 공부해서, 정리가 잘 된 모습👍

  • nestJS도 이렇게 폴더별로 정리를 해보자.

내가 정리하고 싶은 레포지토리

  • 여기에 하위 폴더를 스터디별로 정리하고 싶다.
  • 이해를 위해 parent 레포지토리라고 불러보자.

  • 이 레포지토리를 nest-social-login이라는 하위 폴더로 옮기고 싶다.
  • 이해를 위해 child 레포지토리라고 불러보자.

Git - subtree

child 레포지토리의 remote 등록하자.

$ git remote add <child의 remote 이름> <child 레포지토리 주소>
  • $ git remote -v를 통해 remote 확인이 가능하다.

child 레토지토리를 parent 레포지토리의 하위 폴더로 옮겨보자.

$ git subtree add --prefix=<parent 레포지토리에 저장할 폴더명> <child의 remote 이름> <parent 레포지토리 branch name>
$ git push

원하는 대로 정리가 되었다.

  • git log도 같이 옮겨진 것을 확인 할 수 있다.

Git - Submodule

child 레포지토리를 submodule 프로젝트로 사용하자.

$ git submodule add <child 레포지토리 주소> <parent 레포지토리에 저장할 폴더명(생략하면 child 레토지토리 이름으로 자동 설정)>

  • 이때 .gitmodules 파일을 열어보면 다음과 같이 서브모듈에 대한 정보(이름, 경로, 원격 저장소 url)가 적혀있다.
[submodule "nest-social-login"]
	path = nest-social-login
	url = https://github.com/hocaron/Social-Login.git

원하는 대로 정리가 되었다.

  • 서브모듈 프로젝트를 최신으로 업데이트하려면 서브모듈 디렉토리에서 git fetch 명령을 실행하고 git merge 명령으로 Upstream 브랜치를 Merge해야 한다.

  • 메인 프로젝트로 돌아와서 git diff --submodule 명령을 실행하면 업데이트된 서브모듈과 각 서브모듈에 추가된 커밋을 볼 수 있다. 매번 --submodule 옵션을 쓰고 싶지 않다면 diff.submodule 의 값을 log 로 설정하면 된다.

  • 후에 최근 작업으로 업데이트가 필요하다면 git submodule update --remote --merge 후에 푸시하면 된다.

profile
기록을 통한 성장을

0개의 댓글