| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- restful api
- props
- Sequelize
- jpa
- swagger
- state
- 개발자
- component
- react
- Nest.js
- Kotlin
- node.js
- It
- SWIFT
- kafka
- java
- back-end
- AWS
- 상속
- 개발이취미인사람
- file upload
- front-end
- javascript
- 개발이 취미인 사람
- 반복문
- Producer
- 코틀린
- vue
- 조건문
- spring boot
- Today
- Total
개발이 취미인 사람
[Git] - Clone vs Fork 차이점 본문
개요
안녕하세요. 이번 시간에는 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 방법
- GitHub에서 원하는 저장소 접속
- 우측 상단 Fork 버튼 클릭
- 내 계정 선택
- 내 계정에 복제된 저장소 생성!
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) 작성법에 대해 알아보겠습니다.
참고 자료
'컴퓨터공학 > Git' 카테고리의 다른 글
| [Git] - Git Stash - 임시 저장 활용법 (0) | 2025.12.26 |
|---|---|
| [Git] - Pull Request(PR) / Merge Request(MR) 작성법 (0) | 2025.12.25 |
| [Git] - push, pull, fetch 명령어 이해 (0) | 2025.12.23 |
| [Git] - 충돌(Conflict) 해결 방법 (0) | 2025.12.22 |
| [Git] - Rebase vs Merge 차이점 (0) | 2025.12.21 |