카테고리 없음

Github - 저장소들을 합치고 싶을 때 (feat. subtree)

Pastel Whale 2021. 6. 27. 20:16

오늘도 한 걸음 내디뎠다.

 

이 글에 들어오신 분들은 아마 저와 똑같은 고민을 하셨을 거예요. 

깃허브를 체험하며 신나는 마음에 레파지토리를 이것저것 만들어 놨는데 

하나의 레파지토리로 합치고 싶어진 거죠 ! 

그럴 때를 위하여 간단하게 작성했습니다 ㅎㅎ

 


1. 시나리오

Apple, Banana, Orange 이 3개의 레파지토리를 FruitBox에 담을 것입니다.

새 레파지토리로 이동하려는 기존의 레파지토리들
기존의 레파지토리들을 담을 새 레파지토리

기존 레파지토리 폴더 안에는 이렇게 Seed, Leaf, Fruit.html 파일들이 담겨 있다. 

Apple 레파지토리의 내부

하나 하면 다음 것은 반복작업이라 Apple 레파지토리를 옯겨 보겠습니다 

 


2. 기존 저장소 복사하기

git clone <FruitBox의 깃허브 주소>
cd FruitBox

 터미널에 위 명령어를 적으면 github의 FruitBox가 내 폴더에 복제 된다.

그리고 cd로 복제된 FruitBox로 이동해준다. 

FruitBox에 아무것도 없어서 empty repository라 뜬다.

 

여기서 Apple, Banana, Orange의 최종 목적지를 정리하면

  • Apple repository => FruitBox repository의 Apple 폴더 
  • Banana repository => FruitBox repository의 Banana 폴더
  • Orange repository => FruitBox repository의 Orange 폴더

그래서 mkdir로 FruitBox 폴더 내에 Apple 폴더를 만들어준다.

 


3. Apple을 FruitBox로 이사하기

드디어 대망의 이사 !! 

이번에 사용할 명령어는 이 두 줄이다.

git subtree add --prefix=[로컬 디렉토리명] [저장소 명] [child에서 pull할 branch명]
ls -lh Apple

 

여기서 잠깐 Subtree란?

  • Subtree 실제로는 개별 프로젝트인 여러 개의 프로젝트를 개발자의 로컬에서 하나의 repo로 관리할 수 있게 해준다. SBD(system-based development)에 가까우며, 모든 저장소는 모든것을 포함하고, 각 부분을 수정 가능하다. 또한 코드와 이력이 그대로 복사되기 때문에 히스토리 관리하기 좋다.