기존 레포지터리에서 특정 폴더만 히스토리 포함하여 분리하기(Monorepo -> Polyrepo)

Elena·2026년 1월 26일
post-thumbnail

개인 프로젝트 news-summary는 기존에 한 레포지토리 안에서 백엔드 코드와 프론트엔드 코드를 관리하고 있었으나(monorepo) 프로젝트 규모 확장에 따른 빌드 속도 저하를 해결하고, 프론트/백엔드 간의 의존성을 제거하여 프로젝트의 복잡도를 낮추고 유지보수성을 높이기 위해 분리를 결정했다. 처음엔 새로운 리포지터리를 만들면 이전의 히스토리가 사라지게 될까봐 걱정이 있었는데 다행히 clone을 해서 히스토리도 남길 수 있는 방법이 있었다. 아래는 그 순서들을 기록하여 앞으로도 같은 방법을 사용할 때 보다 쉽게 진행할 수 있도록 하였다.

작업 시나리오

  • 원본 리포지터리: news-summary
  • 새로 만들 리포지터리: news-summary-frontend
  • 분리할 폴더명: frontend

분리 과정

1. 작업용 로컬 복제본 생성

기존 리포지터리에 영향을 주지 않도록 안전한 곳에 임시 작업 폴더를 만든다.

git clone https://github.com/사용자명/news-summary.git news-separation-work
cd news-separation-work

2. 특정 폴더의 히스토리만 추출하여 브랜치 생성

git subtree split 명령어를 사용하여 특정 폴더의 기록만 가진 새로운 임시 브랜치를 만든다.

# --prefix 뒤에는 분리할 폴더명을, -b 뒤에는 임시 브랜치 이름을 적는다.
git subtree split --prefix=frontend -b split-branch
  • 이 과정을 거치면 frontend 폴더 내부에 있던 파일들이 리포지터리의 최상위(Root)로 올라온다.

3. 새 리포지터리 연결 (Remote 설정)

GitHub에서 생성한 새로운 빈 리포지터리 주소를 origin으로 등록(기존 연결을 끊고 새로 등록하는 방식)

# 기존 원격지(원본) 연결 삭제
git remote remove origin

# 새 리포지터리 연결
git remote add origin https://github.com/사용자명/news-summary-frontend.git

4. 새 리포지터리로 푸시

추출한 임시 브랜치의 내용을 새 리포지터리의 main 브랜치로 푸시.

# [임시브랜치명]:[새리포지터리의메인브랜치명]
git push origin split-branch:main

5. 결과 확인 및 뒷정리

이제 새 리포지터리에 접속해 보면, 과거에 frontend 폴더 내의 파일을 수정했던 커밋 로그들이 그대로 살아있는 것을 확인된다. 작업이 끝난 임시 폴더는 삭제해도 무방!

6. 원본 리포지터리 정리

새 리포지터리로 이사가 끝났다면, 원본 리포지터리에서 더 이상 필요 없는 폴더를 삭제해준다.

git checkout main
git rm -r frontend
git commit -m "refactor: extract frontend code into a separate repository"
git push origin main

- 주의사항

폴더 분리해서 clone했을때 .gitignore에 있는 파일들은 안 옮겨질 수 있으니 주의할 것!

profile
一切唯心造

0개의 댓글