개발이 취미인 사람

[Git] - Clone vs Fork 차이점 본문

컴퓨터공학/Git

[Git] - Clone vs Fork 차이점

RyanSin 2025. 12. 24. 20:00
반응형

개요

안녕하세요. 이번 시간에는 Clone과 Fork의 차이점에 대해 알아보겠습니다. 둘 다 원격 저장소의 코드를 가져오는 방법이지만, 목적과 사용 상황이 다릅니다. 특히 오픈소스 기여를 할 때 Fork를 많이 사용하게 되는데, 정확한 개념을 이해하고 넘어가겠습니다. 혹시 이전 시간에 내용을 학습하고 오시지 못 하신 분들은 학습하고 오시는 걸 추천드리겠습니다.

 

[Git] - push, pull, fetch 명령어 이해

 

- Clone vs Fork 한눈에 보기

 

항목 Clone Fork

정의 저장소를 로컬에 복제 저장소를 내 계정에 복제
위치 로컬 컴퓨터 GitHub (원격)
명령어 git clone GitHub 웹에서 클릭
원본 연결 origin으로 연결 별도 연결 없음
push 권한 권한 있으면 가능 내 저장소에만 가능
주 사용처 팀 프로젝트, 개인 프로젝트 오픈소스 기여

- Clone이란?

Clone은 원격 저장소를 로컬 컴퓨터에 복제하는 것입니다. 저장소의 모든 파일, 브랜치, 커밋 히스토리가 그대로 복사됩니다.

기본 사용법

# 기본 클론
git clone https://github.com/username/repository.git

# 특정 폴더명으로 클론
git clone https://github.com/username/repository.git my-folder

# 특정 브랜치만 클론
git clone -b develop https://github.com/username/repository.git

# 최신 커밋만 클론 (히스토리 제외, 빠름)
git clone --depth 1 https://github.com/username/repository.git

Clone 후 상태

# 클론 실행
git clone https://github.com/username/my-project.git
cd my-project

# 원격 저장소 확인
git remote -v

# 출력
origin  https://github.com/username/my-project.git (fetch)
origin  https://github.com/username/my-project.git (push)

Clone하면 자동으로 origin이라는 이름으로 원격 저장소가 등록됩니다.

Clone 사용 상황

# 1. 팀 프로젝트 참여
git clone https://github.com/our-team/project.git

# 2. 내 저장소 다른 컴퓨터에서 작업
git clone https://github.com/my-username/my-repo.git

# 3. 오픈소스 코드 살펴보기 (읽기 전용)
git clone https://github.com/facebook/react.git

- Fork란?

Fork는 다른 사람의 저장소를 내 GitHub 계정으로 복제하는 것입니다. 원본 저장소와 별개의 독립적인 저장소가 생성됩니다.

 

Fork 방법

  1. GitHub에서 원하는 저장소 접속
  2. 우측 상단 Fork 버튼 클릭
  3. 내 계정 선택
  4. 내 계정에 복제된 저장소 생성!

Fork 후 작업 흐름

# 1. Fork한 저장소를 로컬에 클론
git clone https://github.com/MY-USERNAME/forked-repo.git
cd forked-repo

# 2. 원본 저장소를 upstream으로 추가
git remote add upstream https://github.com/ORIGINAL-OWNER/original-repo.git

# 3. 원격 저장소 확인
git remote -v

# 출력
origin    https://github.com/MY-USERNAME/forked-repo.git (fetch)
origin    https://github.com/MY-USERNAME/forked-repo.git (push)
upstream  https://github.com/ORIGINAL-OWNER/original-repo.git (fetch)
upstream  https://github.com/ORIGINAL-OWNER/original-repo.git (push)

Fork 사용 상황

# 1. 오픈소스 기여
# - 원본에 직접 push 권한이 없음
# - Fork 후 내 저장소에서 작업
# - Pull Request로 기여

# 2. 오픈소스 커스터마이징
# - 원본을 기반으로 내 버전 개발
# - 독립적으로 유지보수

# 3. 프로젝트 백업/보존
# - 원본이 삭제되어도 내 Fork는 유지

- 오픈소스 기여 워크플로우

Fork를 활용한 오픈소스 기여 전체 과정입니다.

 

Step 1: Fork & Clone

# 1. GitHub에서 원본 저장소 Fork (웹에서)

# 2. Fork한 저장소 클론
git clone https://github.com/MY-USERNAME/project.git
cd project

# 3. upstream 설정
git remote add upstream https://github.com/ORIGINAL-OWNER/project.git

Step 2: 브랜치 생성 및 작업

# 1. 최신 상태 동기화
git fetch upstream
git checkout main
git merge upstream/main

# 2. 작업 브랜치 생성
git checkout -b feature/my-contribution

# 3. 코드 수정 및 커밋
# ... 코드 작성 ...
git add .
git commit -m "feat: 새로운 기능 추가"

Step 3: Push & Pull Request

# 1. 내 원격 저장소에 푸시
git push origin feature/my-contribution

# 2. GitHub에서 Pull Request 생성 (웹에서)
# - 원본 저장소의 main ← 내 저장소의 feature/my-contribution

Step 4: 동기화 유지

# PR이 머지된 후, 또는 원본이 업데이트된 경우

# 1. upstream에서 최신 코드 가져오기
git fetch upstream

# 2. main 브랜치 업데이트
git checkout main
git merge upstream/main

# 3. 내 원격 저장소도 업데이트
git push origin main

# 4. 사용 완료된 브랜치 삭제
git branch -d feature/my-contribution
git push origin --delete feature/my-contribution

- Clone만 했을 때 vs Fork 후 Clone

시나리오: React에 기여하고 싶다

Clone만 한 경우:

git clone https://github.com/facebook/react.git
cd react

# 작업 후 push 시도
git push origin main

# 결과: 권한 없음!
ERROR: Permission denied

Fork 후 Clone한 경우:

# 1. Fork (GitHub 웹에서)

# 2. 내 저장소 Clone
git clone https://github.com/MY-USERNAME/react.git
cd react

# 3. 작업 후 push
git push origin my-branch  # 성공!

# 4. Pull Request 생성 (GitHub 웹에서)

- origin과 upstream 이해하기

# origin: 내 원격 저장소 (Fork한 것)
# - push 가능
# - 내가 소유

# upstream: 원본 저장소
# - push 불가능 (권한 없음)
# - 최신 코드 가져오는 용도

자주 사용하는 명령어

# 원본 저장소 최신 코드 가져오기
git fetch upstream
git merge upstream/main

# 또는 한 번에
git pull upstream main

# 내 저장소에 반영
git push origin main

- 실습: 오픈소스 기여 시뮬레이션

실제 오픈소스 기여 과정을 연습해봅시다.

# 1. 연습용 저장소 Fork (GitHub 웹에서)
# https://github.com/octocat/Spoon-Knife

# 2. Fork한 저장소 클론
git clone https://github.com/YOUR-USERNAME/Spoon-Knife.git
cd Spoon-Knife

# 3. upstream 설정
git remote add upstream https://github.com/octocat/Spoon-Knife.git

# 4. 확인
git remote -v

# 5. 브랜치 생성
git checkout -b feature/add-my-name

# 6. 파일 수정
echo "YOUR-NAME was here!" >> contributors.md

# 7. 커밋
git add .
git commit -m "docs: Add my name to contributors"

# 8. 푸시
git push origin feature/add-my-name

# 9. GitHub에서 Pull Request 생성 (웹에서)

- 자주 하는 실수

실수 1: upstream 설정 안 함

# 문제: 원본 저장소 변경사항을 못 가져옴

# 해결
git remote add upstream https://github.com/ORIGINAL/repo.git
git fetch upstream
git merge upstream/main

실수 2: Fork 안 하고 Clone만 함

# 문제: push 권한 없음

# 해결
# 1. GitHub에서 Fork
# 2. 원격 저장소 URL 변경
git remote set-url origin https://github.com/MY-USERNAME/repo.git

실수 3: main 브랜치에서 직접 작업

# 문제: PR 관리가 어려움

# 권장: 항상 새 브랜치에서 작업
git checkout -b feature/my-work
# 작업...
git push origin feature/my-work
# PR 생성

- 명령어 정리

# Clone
git clone <URL>                    # 기본 클론
git clone <URL> <folder>           # 폴더명 지정
git clone -b <branch> <URL>        # 특정 브랜치
git clone --depth 1 <URL>          # 최신 커밋만

# Fork 후 설정
git remote add upstream <원본URL>  # upstream 추가
git remote -v                      # 확인

# 원본 동기화
git fetch upstream                 # 가져오기
git merge upstream/main            # 병합
git push origin main               # 내 저장소 반영

# 브랜치 작업
git checkout -b feature/name       # 브랜치 생성
git push origin feature/name       # 푸시
# GitHub에서 PR 생성

마무리

이번 시간에는 Clone과 Fork의 차이점에 대해 알아봤습니다. Clone은 저장소를 로컬에 복제하는 것이고, Fork는 저장소를 내 GitHub 계정에 복제하는 것입니다. 오픈소스에 기여할 때는 Fork → Clone → 작업 → Push → PR 순서로 진행합니다. upstream 설정을 잊지 말고 원본 저장소와 동기화를 유지하는 것이 중요합니다.

다음 시간에는 Pull Request(PR) / Merge Request(MR) 작성법에 대해 알아보겠습니다.


참고 자료