ungju 님의 블로그

커밋 내역 유지하면서 레포지토리 통합하기(git subtree) 본문

트러블 슈팅

커밋 내역 유지하면서 레포지토리 통합하기(git subtree)

ungju 2025. 8. 24. 19:59
반응형
더보기

목차

  • 문제 발생
  • 해결
  • 모아보기
  • 회고

 

공부하면서 만든 여러 개의 폴더를 각 git으로 관리하다가 루트폴더를 만들어서 하위폴더로 관리해야하는 상황이 생겼다.

 

문제 발생

01-folder, 02-folder의 폴더가 각각 레포지토리로 관리되고 있고,
git init을 하지 않은 상태인 03-folderroot/ 의 하위로 추적 및 관리가 되고 있는 상태였다.

 

`root`폴더를 원격으로 올리니 `03-folder`만 업데이트되는 문제가 발생!

 

 

🔥 원하던 폴더 구조와 깃 관리 상태(로컬의 상태와 동일)
root의 하위로 모두 업데이트

─── root/
    ├── 01-folder 
    ├── 02-folder 
    └── 03-folder

 

😑 문제 발생 상태
로컬에선 위와 같은 구조였는데 원격저장소에 올리니,
root하위로 03-folder 만 올라감 ( ; _ ; )

─── root/ 
    └── 03-folder

─── 01-folder /* 개별 레포지토리로 관리되고 있음. */ 
─── 02-folder /* 개별 레포지토리로 관리되고 있음. */ 

 

해결

1️⃣ 새로운 root-01폴더 생성

/* root 폴더 생성 */
mkdir root-01

/* root 폴더로 이동 */
cd root-01

 

2️⃣ 깃 초기화

git init

root-01 초기화 상태 확인!

 

3️⃣ 가져와야 할 01-folder의 각 원격저장소 경로를 remote 등록

remote 주소 등록

git remote add <원격 이름> <원격저장소 URL>
git remote add folder01 <01-folder의 원격저장소 URL>

등록 후 remote 확인

git remote -v

 

4️⃣ 최신상태 반영하기

git fetch <원격 이름> <브랜치>
git fetch folder01 main

 

5️⃣ git subtree 명령어로 폴더 구조 통합

git subtree add --prefix=<폴더명> <원격 이름> <브랜치 이름>
git subtree add --prefix=01-folder folder01 main

 

6️⃣ 통합 후 필요없는 remote 삭제!

통합이 목적이었고, 해당 폴더는 더 이상 업데이트 될 계획이 없기 때문에 지워버렸다.

remote 지우기

git remote remove <원격 경로 이름> 
git remote remove folder01

잘 지워졌는지 확인하기!

git remote -v

🧩 모아보기 🧩

1. 루트 폴더 생성 및 초기화

  mkdir root-01
  cd root-01
  git init


2. 원격 등록 → fetch → subtree 병합 -> (선택) 원격 삭제
  (1) 원격 등록

git remote add folder01 <01-folder 원격 URL>


  
  (2) 원격 최신 상태 가져오기

git fetch folder01 main


  (3) subtree로 폴더 병합

git subtree add --prefix=01-folder folder01 main


  (4) (선택) 원격 삭제

git remote remove folder01


3. `02-folder` 도 똑같이 반복!


 

캬캬 이러면 커밋 내역과 git graph 이력까지 모두 유지하면서 폴더 구조를 통합할 수 있다!

커밋 내역이 날아갈까봐 안타까웠는데 완저니 성공

 

👩‍💻 회고 

 

처음부터 폴더구조를 잘 계획했으면 이런 일이 일어나지 않았을 것이다.

평소에는 잘 일어나지 않을 바보같은 상황이었고🥹, 이런 일이 일어나지 않아야하겠지만!!

덕분에 안전하게 git 내역을 포함해 폴더를 병합하는 방법을 배웠으니 오히려 좋아🍀