포스트

[이제와서 시작하는 GitHub 마스터하기 - 기초편 #14] Fork와 Clone: 오픈소스 기여의 시작

[이제와서 시작하는 GitHub 마스터하기 - 기초편 #14] Fork와 Clone: 오픈소스 기여의 시작

학습 목표

이 장을 마치면 다음을 할 수 있습니다:

  • ✅ Fork와 Clone의 차이를 이해할 수 있습니다
  • ✅ 오픈소스 프로젝트를 Fork할 수 있습니다
  • ✅ 저장소를 Clone하여 로컬에서 작업할 수 있습니다
  • ✅ Upstream과 Origin을 관리할 수 있습니다

지난 편 복습

기초편 #13에서는 브랜치 전략을 배웠습니다:

  • 주요 브랜치 전략 이해 (Git Flow, GitHub Flow)
  • 프로젝트에 맞는 전략 선택
  • 효율적인 협업 워크플로우 구축
  • 브랜치 네이밍 컨벤션

⚠️ 중요: 이제부터 터미널을 사용합니다!

지금까지의 학습 방식

#1편~#13편까지 우리는 GitHub 웹 인터페이스만으로 작업했습니다:

  • ✅ 웹 브라우저에서 파일 추가/수정
  • ✅ 웹에서 커밋 메시지 작성
  • ✅ 웹에서 브랜치 생성/병합
  • ✅ 웹에서 Pull Request 생성

이제부터는 터미널(명령어)을 사용합니다!

왜 터미널을 사용하나요?

  • 🚀 대용량 프로젝트: 수백 개의 파일을 한 번에 관리
  • 🔄 복잡한 작업: 브랜치 전환, 충돌 해결, 히스토리 관리
  • 🤝 팀 협업: 실제 개발 현장에서는 터미널 사용이 필수
  • 효율성: 반복 작업을 자동화하고 빠르게 처리

준비물 체크리스트

시작하기 전에 다음을 확인하세요:

  • Git 설치 완료 (기초편 #7 참고)
    1
    2
    3
    
    # 설치 확인
    git --version
    # git version 2.x.x 이상
    
  • 터미널 앱 준비
    • Mac: 기본 Terminal 또는 iTerm2
    • Windows: Git Bash (Git 설치 시 포함)
    • Linux: 기본 터미널
  • SSH 키 설정 권장 (기초편 #3 참고)
    • 매번 비밀번호 입력 없이 편리하게 작업
    • HTTPS도 가능하지만 SSH 권장

💡 처음 터미널을 사용하시나요?

걱정하지 마세요! 다음 내용을 천천히 따라하면 됩니다:

  1. 복사-붙여넣기 OK: 명령어를 정확히 복사해서 사용하세요
  2. 에러 괜찮음: 에러 메시지는 학습 과정의 일부입니다
  3. 한 줄씩 실행: 여러 명령어를 한 번에 실행하지 마세요
  4. 결과 확인: 각 명령어 실행 후 결과를 꼭 확인하세요

📚 복습 추천: 터미널이 처음이라면 기초편 #7의 “터미널 기본 사용법” 섹션을 먼저 복습하세요!


Fork vs Clone

Fork (포크)

개념: GitHub에서 다른 사람의 저장소를 내 계정으로 복사

graph LR
    A[Original Repo<br/>owner/project] -->|Fork| B[My Fork<br/>myname/project]
    B -->|Clone| C[Local]

특징:

  • 🌐 GitHub 서버에서 복사
  • 👤 내 계정에 독립적인 저장소 생성
  • 🔗 원본과 연결 유지
  • 🤝 오픈소스 기여에 필수

Clone (클론)

개념: 원격 저장소를 로컬 컴퓨터로 복사

graph LR
    A[Remote Repo<br/>GitHub] -->|Clone| B[Local Repo<br/>내 컴퓨터]

특징:

  • 💻 로컬에서 작업 가능
  • 🔄 push/pull로 동기화
  • 📂 전체 히스토리 다운로드

비교표

항목 Fork Clone
위치 GitHub 서버 로컬 컴퓨터
용도 오픈소스 기여 로컬 작업
권한 읽기만 가능 (원본) 읽기/쓰기 (내 저장소)
관계 원본과 독립 원격과 연결

Fork 사용법

1. Fork하기

GitHub에서:

1
2
3
4
1. 원본 저장소 방문 (예: github.com/original-owner/project)
2. 우측 상단 "Fork" 버튼 클릭
3. 내 계정 선택
4. 복사 완료 (github.com/myname/project)

2. Fork한 저장소 Clone

1
2
3
4
5
6
7
8
9
10
11
# HTTPS 방식
git clone https://github.com/myname/project.git

# SSH 방식
git clone git@github.com:myname/project.git

# 특정 브랜치만
git clone -b branch-name https://github.com/myname/project.git

# 폴더명 지정
git clone https://github.com/myname/project.git my-folder

3. Upstream 설정

원본 저장소를 추적하기 위해:

1
2
3
4
5
6
7
8
9
10
11
cd project

# 원본 저장소를 upstream으로 추가
git remote add upstream https://github.com/original-owner/project.git

# 확인
git remote -v
# origin    https://github.com/myname/project.git (fetch)
# origin    https://github.com/myname/project.git (push)
# upstream  https://github.com/original-owner/project.git (fetch)
# upstream  https://github.com/original-owner/project.git (push)

4. 최신 상태 유지

1
2
3
4
5
6
7
8
9
10
11
12
# upstream에서 최신 코드 가져오기
git fetch upstream

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

# 또는 한 번에
git pull upstream main

# 내 Fork에 반영
git push origin main

Clone 사용법

Clone 방식 선택: HTTPS vs SSH

Clone을 시작하기 전에 어떤 방식을 사용할지 선택해야 합니다.

항목 HTTPS SSH
설정 설정 불필요 SSH 키 등록 필요
인증 매번 입력 (토큰/비밀번호) 한 번만 설정
보안 좋음 매우 좋음
속도 보통 빠름
방화벽 문제 없음 차단될 수 있음
권장 대상 처음 시작하는 분 정기적으로 사용하는 분

초보자 추천 순서

  1. 처음에는 HTTPS로 시작 (빠르게 시작 가능)
  2. SSH 키 설정 (기초편 #3 참고)
  3. SSH로 전환 (편리함을 위해)

💡 : 회사 방화벽이 SSH를 차단하는 경우 HTTPS를 사용하세요. 대부분의 경우 SSH가 더 편리합니다!

기본 Clone

1
2
3
4
5
# HTTPS (간편, 매번 인증)
git clone https://github.com/username/repo.git

# SSH (한 번 설정, 편리)
git clone git@github.com:username/repo.git

Clone 옵션

1
2
3
4
5
6
7
8
9
10
11
# 얕은 클론 (최근 커밋만, 빠름)
git clone --depth 1 https://github.com/username/repo.git

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

# 서브모듈 포함
git clone --recurse-submodules https://github.com/username/repo.git

# 특정 폴더로
git clone https://github.com/username/repo.git my-project

Clone 후 작업

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 1. 디렉토리 이동
cd repo

# 2. 상태 확인
git status

# 3. 브랜치 확인
git branch -a

# 4. 작업 시작
git checkout -b feature/my-feature

# 5. 작업 및 커밋
git add .
git commit -m "feat: add new feature"

# 6. 푸시
git push origin feature/my-feature

오픈소스 기여 워크플로우

완전한 기여 과정

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
32
33
34
35
36
37
38
39
40
41
42
# === 1단계: Fork & Clone ===
# GitHub에서 Fork 버튼 클릭

# Clone
git clone https://github.com/myname/project.git
cd project

# Upstream 설정
git remote add upstream https://github.com/original-owner/project.git

# === 2단계: 최신 코드 동기화 ===
git fetch upstream
git checkout main
git merge upstream/main

# === 3단계: 브랜치 생성 및 작업 ===
git checkout -b feature/awesome-feature

# 작업...
git add .
git commit -m "feat: add awesome feature"

# === 4단계: 푸시 ===
git push origin feature/awesome-feature

# === 5단계: Pull Request ===
# GitHub에서 PR 생성
# original-owner/project ← myname/project:feature/awesome-feature

# === 6단계: 리뷰 반영 ===
# 피드백에 따라 수정
git add .
git commit -m "fix: apply review feedback"
git push origin feature/awesome-feature

# === 7단계: 병합 후 정리 ===
# PR이 병합되면
git checkout main
git pull upstream main
git push origin main
git branch -d feature/awesome-feature
git push origin --delete feature/awesome-feature

Remote 관리

Remote 확인

1
2
3
4
5
6
# Remote 목록
git remote -v

# Remote 상세 정보
git remote show origin
git remote show upstream

Remote 추가/변경/삭제

1
2
3
4
5
6
7
8
9
10
11
# 추가
git remote add upstream https://github.com/owner/repo.git

# URL 변경
git remote set-url origin https://github.com/newname/repo.git

# 삭제
git remote remove upstream

# 이름 변경
git remote rename origin my-origin

자주 묻는 질문 (FAQ)

Q1. Fork와 Clone 중 뭐부터 해야 하나요?

A: 순서:

  1. GitHub에서 Fork (권한 없는 저장소)
  2. 로컬로 Clone (내 Fork를)
  3. Upstream 설정 (원본 추적)

Q2. Fork 없이 Clone만 하면 안 되나요?

A: 권한에 따라 다릅니다:

  • ✅ 내 저장소: Clone만으로 충분
  • ❌ 남의 저장소: Fork 필수 (push 권한 없음)

Q3. Fork한 저장소를 원본과 계속 동기화해야 하나요?

A: 네, 권장합니다:

1
2
3
4
5
# 정기적으로 (주 1회)
git fetch upstream
git checkout main
git merge upstream/main
git push origin main

Q4. Clone이 너무 느려요!

A: 얕은 클론 사용:

1
2
3
4
5
# 최근 커밋만 (빠름)
git clone --depth 1 https://github.com/user/repo.git

# 나중에 전체 히스토리 가져오기
git fetch --unshallow

Q5. HTTPS vs SSH 중 뭐가 좋나요?

A:

  • HTTPS: 간편, 방화벽 문제 없음, 매번 인증
  • SSH: 한 번 설정 후 편리, 보안 좋음

권장: SSH (기초편 #3 참고)

실습 과제

과제 1: Fork & Clone 연습

  1. 유명한 오픈소스 프로젝트 찾기
  2. Fork하기
  3. Clone하기
  4. Upstream 설정
  5. git remote -v 확인

과제 2: 동기화 연습

  1. Upstream에서 최신 코드 가져오기
  2. main 브랜치 업데이트
  3. 내 Fork에 푸시
  4. GitHub에서 확인

과제 3: 모의 기여

  1. Fork한 프로젝트에서 브랜치 생성
  2. README에 내 이름 추가
  3. 커밋 및 푸시
  4. (실제 PR은 생성하지 말 것)

마무리

축하합니다! Fork와 Clone을 마스터했습니다.

핵심 요약:

  • Fork: GitHub에서 내 계정으로 복사
  • Clone: 로컬 컴퓨터로 복사
  • Upstream: 원본 저장소 추적
  • 워크플로우: Fork → Clone → Upstream → 작업 → PR

다음 편에서는 Pull Request를 배워보겠습니다!

📚 GitHub 마스터하기 시리즈

🌱 기초편 (입문자)

  1. GitHub 소개와 계정 만들기
  2. 프로필 꾸미기와 포트폴리오
  3. 보안 설정과 인증
  4. Repository 이해하기
  5. README 작성법
  6. .gitignore와 라이선스
  7. 첫 커밋과 관리
  8. git add와 commit
  9. git push와 pull
  10. 실전 워크플로우
  11. Branch 기본
  12. Merge와 Rebase
  13. 브랜치 전략
  14. Fork와 Clone 👉 현재 글
  15. Pull Request

💼 실전편 (중급자)

  1. Issues 활용법
  2. Projects와 칸반보드
  3. 코드 리뷰 실전
  4. Discussions 활용
  5. 팀 협업 전략
  6. GitHub Pages 블로그

🚀 고급편 (전문가)

  1. GitHub Actions 입문
  2. Actions 고급 활용
  3. Webhooks와 API
  4. GitHub Apps 개발
  5. 보안 기능 활용
  6. Packages 레지스트리
  7. Codespaces 클라우드 개발
  8. GitHub CLI 마스터
  9. Insights와 Analytics

🏆 심화편 (전문가+)

  1. Submodules와 Subtree
  2. Git Internals 이해
  3. 브랜칭과 릴리스 전략
  4. GraphQL API 활용
  5. GitHub Copilot 마스터
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.