반응형

GitHub를 관리하던 중에,
여러 repository를 합쳐야 하는 순간이 있었다.

그런데, 그냥 새로운 폴더를 만들고, 내용을 옮겨서 git push를 하고 내용을 옮긴 repository를 삭제하면
기존의 커밋기록이 삭제된다. 

commit log를 유지하면서 Git Repository를 합치는 방법을 기록하고자 한다.

우선, 우리가 옮기고 싶은 repository의 이름을 sub_repo,

메인으로 가지고 사용할 repository의 이름을 main_repo 라고 하자.

 

  • 1. main_repo를 clone 받는다.
git clone https://github.com/깃허브사용자이름/main_repo

예시) Algorithm-interview 라는 이름의 레포지토리를 clone 받는다.

 

 

  • 2. main_repo를 clone받은 폴더로 이동후, 아래와 같이 git subtree add --prefix=(하위디렉토리이름설정) (옮겨올레포지토리주소) (옮겨올레포지토리의브랜치) 를 입력한다.
git subtree add --prefix=하위디렉토리이름설정 https://github.com/깃허브사용자이름/main_repo.git master

예시) Algorithm-interview를 clone받은 디렉토리에 programmers 라는 이름으로 폴더를 생성해서 옮기고싶은 레포지토리(https://github.com/mgkim-developer/programmers) 를 저장한다.

 

"Working tree has modifications. Cannot add."   에러 발생시 해결법

 해당 에러는 메인 repo가 현재 최신버전이 아니기 때문이다.
따라서 git push 를 통해 현재 폴더가 최신버전이 되도록 하면 해결된다.
+ git status 명령어를 통해 현재 폴더가 최신버전인지 확인할 수 있다.

 

"fatal: couldn't find remote ref master" 에러 발생시 해결법

해당 에러의 원인은 sub_repo의 브랜치 이름을 잘못 입력했기 때문이다.
따라서, 아래의 방법과 처럼 sub_repo의 현재 브랜치의 이름을 확인한 다음,
마지막 master라고 적었던 부분에 정확한 브랜치 이름을 적으면 해결된다.

 

 

  • 3. main_repo를 clone 받은 디렉토리에 "하위디렉토리이름설정"으로 지정된 이름의 디렉토리가 생성되었는지 확인한 후,
    git add . → git push 순으로 진행한다.

 

  • GitHub에 "하위디렉토리이름설정" 설정한 이름의 새로운 file이 추가되고, commit log도 모두 이동된 것을 확인할 수 있다.

 

기존의 sub_repo는 delete해도 된다.

 

이렇게 하면, commit log를 유지하면서 sub_repo를 main_repo로 repository를 합칠 수 있다.

반응형