The journey to becoming a developer

My future is created by what I do today, not tomorrow.

Programming/Git

🌳 Git subtree: 여러 개의 Repository 하나로 합치기

Millie 2023. 2. 11. 22:27

Motivation

내가 처음 GitHub 계정을 만든 날은 2021년 6월 6일. 벌써 3년을 향해 달리고 있다는 사실이 믿기지 않을 정도로 시간이 빠르게 흘렀다. 이렇게 시간이 흐르는 동안, 나의 GitHub repository 갯수는 계속 늘어만 갔다. 뭔가를 새롭게 공부할 때나 프로젝트를 시작할 때마다 새로 만드니 당연한 거였다.

자잘한 프로젝트들이 많다.

하지만 repository 개수가 60개를 넘어가니, 좀 정리를 해줘야겠다고 생각했다. 그런데 막상 repository 그냥 삭제하자니, 과거의 커밋 내역까지 사라지는 게 아쉬웠다.

 

과거의 커밋 내역을 살리면서 repository를 하나로 합칠 순 없을까?

아까 그 자잘한 repository들을 이 small-project에 깔끔하게 넣어주고 싶다.

궁금해서 구글링을 해봤고, 방법을 찾아낼 수 있었다. 핵심은 git 명령어 중 subtree를 쓰는 것이었다.

git subtree는 main repository에 다른 repository를 복제해올 수 있는 명령어이다. 이것을 사용해서 repository의 복사본을 다른 repository의 하위 디렉토리로 만들 수 있다.

이것은 Git 프로젝트에서 프로젝트의 종속성을 관리하기 위한 다양한 방법 중에 하나다. 기존 repository에 subtree를 추가하게 되는데, 이것은 다른 repository URL 및 branch, tag에 대한 참조이다. 이것은 단순히 원격 저장소에 대한 참조가 아니라고 한다.

 

Command

상위 repsitory의 터미널로 이동해 이 명령어를 입력해준다. 단, 상위 repository는 원격에 추가가 되어있어야 한다.

git subtree add --prefix=[합치고 싶은 레포지토리 이름] [합치고 싶은 레포지토리 주소] [합치고 싶은 레포지토리 메인 브랜치 이름]

// 예시
git subtree add --prefix=bucket-list <https://github.com/jaypedia/bucket-list.git> main

위 명령어를 터미널에 쳐준 후 git push를 해 주면 된다.

 

Result

small-projects에 bucket-list repository가 폴더로 들어왔다. 커밋 내역을 보니, bucket-list repository의 특정 커밋을 참조하고 있다.

이렇게 자잘한 자바스크립트 프로젝트를 하나의 small-projects repository에 옮길 수 있었다.

git subtree라는 편리한 기능을 활용하여 repository를 무려 10개 이상 삭제할 수 있었다! (마음이 가벼워지는 느낌!)

 

Thoughts

repository가 너무 많으니 관리도 제대로 되지 않았는데, 이렇게 한 번 깔끔하게 정리를 해 주니 확실히 눈에 더 잘 들어온다. 미니멀리즘의 중요성을 GitHub의 레포지토리 관리에서도 느낀다. 무작정 많이 가지고 있는 것이 중요한 것이 아니라, 내가 관리할 수 있을 만큼 가지고 있는 것이 중요하다는 것을.

 


 

Reference

https://www.geeksforgeeks.org/git-subtree/