들어가며: 내 잔디 어디 갔어? 😱
오픈소스를 공부하거나 마음에 드는 프로젝트를 발견했을 때, 우리는 보통 Fork(포크) 버튼을 누릅니다. 그리고 내 계정으로 가져온 레포지토리에서 열심히 코드를 수정하고 커밋을 하죠.
그런데 어느 날, 내 깃허브 프로필을 보고 충격을 받습니다.
"어라? 나 분명 어제도, 오늘도 커밋했는데... 왜 잔디(Green Squares)가 하나도 안 심어졌지?"
왜 이런 일이 생길까요?
깃허브의 정책상 Fork한 레포지토리에 한 커밋 은 원본 레포지토리(Upstream)의 기본 브랜치(주로 main)로 Merge(병합)되었을 때만 잔디로 인정됩니다. 즉, 나 혼자 공부하려고 포크해서 끄적인 커밋들은 잔디로 쳐주지 않는다는 것이죠.
해결책: 미러링(Mirroring)으로 이사 가자! 🚚
이 문제를 해결하는 가장 깔끔한 방법은 포크한 레포지토리를 완전히 새로운 나의 레포지토리로 복제(Mirroring) 하는 것입니다. 단순히 파일을 복사붙여넣기 하는 게 아니라, 기존의 모든 커밋 기록(History)까지 완벽하게 내 것으로 만드는 방법이죠.
지금부터 Git 초보자도 따라 할 수 있는 3단계 이사 방법을 소개합니다.
1단계: 짐 쌀 준비하기 (Bare Clone)
먼저, 이사할 짐을 싸야 합니다. 이때 우리는 일반적인 git clone이 아니라 git clone --bare라는 명령어를 사용할 거예요.
일반 Clone vs Bare Clone?
- 일반 Clone: 우리가 평소에 쓰는 방식입니다. 소스 코드 파일들이 보이고 바로 수정할 수 있는 상태죠. (작업용)
- Bare Clone: 소스 코드는 안 보이고, Git의 기록(History, config 등)만 담긴 알짜배기 압축 파일 같은 상태입니다. (이사/백업용)
터미널(명령 프롬프트)을 켜고, 이사하고 싶은(현재 작업 중인 포크 뜬) 레포지토리를 Bare 모드로 내려받습니다.
# 내 컴퓨터의 바탕화면이나 적당한 폴더로 이동
cd Desktop
# --bare 옵션을 붙여서 클론 (폴더명 뒤에 .git이 붙습니다)
git clone --bare [https://github.com/my-account/forked-repo.git](https://github.com/my-account/forked-repo.git)
이제 바탕화면에 forked-repo.git이라는 폴더가 생겼을 겁니다.
2단계: 새 집 마련하기 (New Repository)
이제 짐을 풀 새 집이 필요하겠죠?
- 깃허브(GitHub)에 접속합니다.
- 우측 상단의
+버튼을 누르고 New repository 를 클릭합니다. - 레포지토리 이름을 짓고(예:
my-study-project), Create repository 를 눌러 생성합니다. - 주의:
Initialize with a README같은 옵션은 체크하지 마세요! 완전히 빈(Empty) 레포지토리여야 충돌이 안 납니다.
생성된 새 레포지토리의 주소(https://github.com/my-account/my-study-project.git)를 복사해 두세요.
3단계: 이사짐 풀기 (Mirror Push)
이제 아까 싸둔 짐(Bare Clone한 폴더)을 새 집으로 보낼 차례입니다.
# 1. 아까 다운받은 폴더 안으로 들어갑니다.
cd forked-repo.git
# 2. 새 집 주소로 미러 푸시(Mirror Push)를 합니다.
git push --mirror [https://github.com/my-account/my-study-project.git](https://github.com/my-account/my-study-project.git)
✨ 끝났습니다!
이제 깃허브에서 새로 만든 레포지토리(my-study-project)로 가보세요. 이전 프로젝트의 모든 파일, 브랜치, 태그, 그리고 소중한 커밋 기록 들이 완벽하게 옮겨져 있을 것입니다.
물론, 이제부터 찍히는 커밋들은 내 잔디밭에 예쁘게 기록 됩니다.
💡 더 쉬운 방법: AI 에이전트(Cursor) 활용하기
터미널 명령어가 낯설거나 복잡하게 느껴지시나요? Cursor 같은 AI 코딩 에디터를 사용 중이라면 직접 명령어를 칠 필요도 없습니다. 에이전트에게 아래와 같이 쿨하게 시켜보세요.
프롬프트 예시:
new : [옮길 새 레포지토리 주소]
old : [포크한 기존 레포지토리 주소]
new 레포지토리에 clone bare로 복사 후, 미러푸쉬로 완벽하게 옮겨줘.
이렇게만 입력하면 에이전트가 알아서 폴더 생성부터 미러 푸시까지 척척 진행해 줍니다. 참 쉽죠?
마무리 및 정리
이제 이사를 마쳤으니, 컴퓨터에 남아있는 이사짐(forked-repo.git 폴더)은 지워버리셔도 됩니다. 그리고 새로 만든 레포지토리를 평소처럼 git clone 받아서 즐겁게 코딩하시면 됩니다.
3줄 요약
git clone --bare [원본_주소]로 기록만 가져온다.- 깃허브에서 새 레포지토리 를 만든다.
git push --mirror [새_주소]로 기록을 밀어 넣는다.
이 방법으로 여러분의 소중한 코딩 기록을 잔디로 남겨보세요! 저는 총 43개의 잔디가 돌아왔네요!