Git 저장소 마이그레이션 가이드

조직(Organization) 프로젝트가 종료된 후, Fork를 사용하지 않고 개인 저장소로 코드를 안전하게 가져오는 3가지 방법을 소개합니다.

📊 방법별 특징 비교

이 섹션에서는 세 가지 방식의 장단점을 시각적으로 비교합니다. 각 방법은 커밋 내역 보존 여부와 작업 난이도에서 큰 차이를 보입니다.

🌐 Web UI 사용

가장 쉬움

GitHub의 Import 기능을 사용하여 클릭 몇 번으로 복사

📦 ZIP 다운로드

히스토리 X

압축 파일로 소스코드만 다운로드 (커밋 기록 유실)

💻 CLI 사용 (CMD)

가장 완벽함

터미널에서 clone 후 원격 저장소(remote) 주소를 변경하여 푸시

🤔 어떤 방법을 선택해야 할까요?

과거의 커밋 기록(History)이 그대로 보존되어야 하나요?

🛠️ 상세 실행 방법

각 탭을 클릭하여 원하는 방식의 상세한 단계별 진행 과정을 확인하세요.

🌐

GitHub 웹에서 바로 마이그레이션 (Import repository)

별도의 프로그램 설치 없이 브라우저 환경에서 가장 빠르게 커밋 기록까지 복사하는 방법입니다.

  1. GitHub 우측 상단의 + 버튼을 클릭합니다.
  2. 메뉴에서 Import repository를 선택합니다.
  3. Your old repository's clone URL 항목에 가져올 조직(Organization) 저장소의 주소를 입력합니다. (예: https://github.com/org-name/repo-name.git)
  4. 새로 생성할 본인의 저장소 이름(Repository Name)과 공개 여부(Public/Private)를 설정합니다.
  5. Begin import 버튼을 클릭합니다. (원본 저장소가 Private인 경우 권한 인증을 위한 알림이 뜨면 계정 정보를 입력합니다.)
💡 Tip: Fork와 달리 원본 저장소와의 연결 고리가 끊어진 완전히 독립적인 복사본이 생성되며, 기존의 모든 커밋 내역(History)과 브랜치가 그대로 유지됩니다.
📦

ZIP 파일로 다운로드 후 업로드

단순히 최종 완성된 소스코드 파일만 필요할 때 사용하는 직관적인 방법입니다.

⚠️

주의: 이 방법은 .git 폴더(버전 관리 내역)가 포함되지 않으므로 과거의 커밋 기록이나 브랜치 정보가 모두 초기화됩니다. 마치 처음부터 새로 프로젝트를 만든 것처럼 취급됩니다.

  1. 조직(Organization)의 대상 저장소 페이지로 이동합니다.
  2. 초록색 Code ▼ 버튼을 클릭하고 Download ZIP을 선택하여 압축 파일을 받습니다.
  3. 다운로드 받은 압축 파일을 로컬 PC의 원하는 위치에 해제합니다.
  4. GitHub 본인 계정에서 새로운 빈 저장소(New repository)를 생성합니다.
  5. 압축 해제한 파일들을 터미널이나 GitHub Desktop을 이용해 새 저장소에 업로드(push) 하거나, 웹 브라우저에서 'Upload files' 기능을 이용해 드래그 앤 드롭으로 올립니다.
💻

CMD / 터미널에서 Clone 후 Remote 변경

개발자들에게 가장 익숙하며, 로컬 환경에 완벽한 사본을 만들면서 연결된 원격 주소만 바꿔치기 하는 정석적인 방법입니다.

1단계: 기존 저장소 로컬에 복제하기

일반 clone을 사용하거나, 모든 브랜치와 태그를 완벽히 가져오려면 --mirror 옵션을 추천합니다.

git clone https://github.com/org-name/old-repo.git cd old-repo

2단계: 원격 저장소(Remote) 주소 변경하기

기존 origin 주소를 내 계정에 새로 만든 빈 저장소 주소로 덮어씁니다.

git remote set-url origin https://github.com/my-username/new-repo.git

*(참고) git remote remove origingit remote add origin 새주소 를 하는 것과 동일한 효과입니다.*

3단계: 새 저장소에 코드 업로드 (Push)

변경된 주소로 로컬의 코드와 커밋 기록을 모두 밀어 올립니다.

git push -u origin main

*기본 브랜치가 master인 경우 main 대신 master를 입력하세요.*