GitHub ํ˜‘์—…

GitHub ํ˜‘์—…

1. ํ˜‘์—… ์›Œํฌํ”Œ๋กœ์šฐ ๊ฐœ์š”

GitHub์—์„œ ํ˜‘์—…ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ๋ฐฉ์‹:

๋ฐฉ์‹ ์„ค๋ช… ์‚ฌ์šฉ ๊ฒฝ์šฐ
Collaborator ์ €์žฅ์†Œ์— ์ง์ ‘ ํ‘ธ์‹œ ๊ถŒํ•œ ํŒ€ ํ”„๋กœ์ ํŠธ
Fork & PR ๋ณต์ œ ํ›„ Pull Request ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ

2. Fork (ํฌํฌ)

๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ €์žฅ์†Œ๋ฅผ ๋‚ด ๊ณ„์ •์œผ๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

Fork ํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. ์›๋ณธ ์ €์žฅ์†Œ ํŽ˜์ด์ง€ ๋ฐฉ๋ฌธ
  2. ์šฐ์ธก ์ƒ๋‹จ "Fork" ๋ฒ„ํŠผ ํด๋ฆญ
  3. ๋‚ด ๊ณ„์ •์œผ๋กœ ๋ณต์‚ฌ๋จ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                                                         โ”‚
โ”‚  ์›๋ณธ: octocat/hello-world                              โ”‚
โ”‚         โ”‚                                               โ”‚
โ”‚         โ”‚ Fork                                          โ”‚
โ”‚         โ–ผ                                               โ”‚
โ”‚  ๋‚ด ๊ณ„์ •: myname/hello-world  โ† ๋…๋ฆฝ์ ์ธ ๋ณต์‚ฌ๋ณธ          โ”‚
โ”‚                                                         โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Fork ํ›„ ์ž‘์—… ํ๋ฆ„

# 1. Forkํ•œ ์ €์žฅ์†Œ ํด๋ก 
git clone git@github.com:myname/hello-world.git
cd hello-world

# 2. ์›๋ณธ ์ €์žฅ์†Œ๋ฅผ upstream์œผ๋กœ ์ถ”๊ฐ€
git remote add upstream git@github.com:octocat/hello-world.git

# 3. remote ํ™•์ธ
git remote -v
# origin    git@github.com:myname/hello-world.git (fetch)
# origin    git@github.com:myname/hello-world.git (push)
# upstream  git@github.com:octocat/hello-world.git (fetch)
# upstream  git@github.com:octocat/hello-world.git (push)

์›๋ณธ ์ €์žฅ์†Œ์™€ ๋™๊ธฐํ™”

# 1. ์›๋ณธ์˜ ์ตœ์‹  ๋ณ€๊ฒฝ ๊ฐ€์ ธ์˜ค๊ธฐ
git fetch upstream

# 2. main ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉ
git switch main
git merge upstream/main

# 3. ๋‚ด Fork์— ๋ฐ˜์˜
git push origin main

3. Pull Request (PR)

๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์›๋ณธ ์ €์žฅ์†Œ์— ๋ฐ˜์˜ํ•ด๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

Pull Request ์ƒ์„ฑ ๊ณผ์ •

# 1. ์ƒˆ ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…
git switch -c feature/add-greeting

# 2. ๋ณ€๊ฒฝ ํ›„ ์ปค๋ฐ‹
echo "Hello, World!" > greeting.txt
git add .
git commit -m "feat: ์ธ์‚ฌ๋ง ํŒŒ์ผ ์ถ”๊ฐ€"

# 3. ๋‚ด Fork์— ํ‘ธ์‹œ
git push origin feature/add-greeting

GitHub์—์„œ PR ์ƒ์„ฑ

  1. GitHub์—์„œ "Compare & pull request" ๋ฒ„ํŠผ ํด๋ฆญ
  2. PR ์ •๋ณด ์ž‘์„ฑ:
  3. ์ œ๋ชฉ: ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์š”์•ฝ
  4. ์„ค๋ช…: ์ƒ์„ธ ๋‚ด์šฉ, ๊ด€๋ จ ์ด์Šˆ
  5. "Create pull request" ํด๋ฆญ

PR ํ…œํ”Œ๋ฆฟ ์˜ˆ์‹œ

## ๋ณ€๊ฒฝ ์‚ฌํ•ญ
- ์ธ์‚ฌ๋ง ์ถœ๋ ฅ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
- greeting.txt ํŒŒ์ผ ์ƒ์„ฑ

## ๊ด€๋ จ ์ด์Šˆ
Closes #123

## ํ…Œ์ŠคํŠธ
- [x] ๋กœ์ปฌ์—์„œ ๋™์ž‘ ํ™•์ธ
- [x] ๊ธฐ์กด ๊ธฐ๋Šฅ์— ์˜ํ–ฅ ์—†์Œ

## ์Šคํฌ๋ฆฐ์ƒท
(ํ•„์š”์‹œ ์ฒจ๋ถ€)

PR ์›Œํฌํ”Œ๋กœ์šฐ

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                                                              โ”‚
โ”‚  1. Fork & Clone                                             โ”‚
โ”‚         โ†“                                                    โ”‚
โ”‚  2. ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ & ์ž‘์—…                                         โ”‚
โ”‚         โ†“                                                    โ”‚
โ”‚  3. Push to Fork                                             โ”‚
โ”‚         โ†“                                                    โ”‚
โ”‚  4. Create Pull Request                                      โ”‚
โ”‚         โ†“                                                    โ”‚
โ”‚  5. Code Review (๋ฆฌ๋ทฐ์–ด ํ”ผ๋“œ๋ฐฑ)                                โ”‚
โ”‚         โ†“                                                    โ”‚
โ”‚  6. ์ˆ˜์ • ํ•„์š”์‹œ ์ถ”๊ฐ€ ์ปค๋ฐ‹                                       โ”‚
โ”‚         โ†“                                                    โ”‚
โ”‚  7. Merge (๊ด€๋ฆฌ์ž๊ฐ€ ๋ณ‘ํ•ฉ)                                      โ”‚
โ”‚                                                              โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

4. Code Review (์ฝ”๋“œ ๋ฆฌ๋ทฐ)

PR์„ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ๊ฒ€ํ† ํ•˜๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ๊ณ ๋ฐ›์Šต๋‹ˆ๋‹ค.

๋ฆฌ๋ทฐ ์š”์ฒญํ•˜๊ธฐ

  1. PR ํŽ˜์ด์ง€์—์„œ "Reviewers" ํด๋ฆญ
  2. ๋ฆฌ๋ทฐ์–ด ์„ ํƒ

๋ฆฌ๋ทฐ ์ž‘์„ฑํ•˜๊ธฐ

  1. "Files changed" ํƒญ์—์„œ ๋ณ€๊ฒฝ ๋‚ด์šฉ ํ™•์ธ
  2. ๋ผ์ธ๋ณ„๋กœ ์ฝ”๋ฉ˜ํŠธ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ
  3. ๋ฆฌ๋ทฐ ์™„๋ฃŒ:
  4. Comment: ์ผ๋ฐ˜ ์ฝ”๋ฉ˜ํŠธ
  5. Approve: ์Šน์ธ
  6. Request changes: ์ˆ˜์ • ์š”์ฒญ

๋ฆฌ๋ทฐ ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜

# ํ”ผ๋“œ๋ฐฑ ๋ฐ›์€ ๋‚ด์šฉ ์ˆ˜์ •
git add .
git commit -m "fix: ๋ฆฌ๋ทฐ ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜"
git push origin feature/add-greeting

# PR์— ์ž๋™์œผ๋กœ ์ปค๋ฐ‹ ์ถ”๊ฐ€๋จ

5. Issues (์ด์Šˆ)

๋ฒ„๊ทธ, ๊ธฐ๋Šฅ ์š”์ฒญ, ์งˆ๋ฌธ ๋“ฑ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Issue ์ž‘์„ฑ

  1. ์ €์žฅ์†Œ์˜ "Issues" ํƒญ
  2. "New issue" ํด๋ฆญ
  3. ์ œ๋ชฉ๊ณผ ์„ค๋ช… ์ž‘์„ฑ

Issue ํ…œํ”Œ๋ฆฟ ์˜ˆ์‹œ

๋ฒ„๊ทธ ๋ฆฌํฌํŠธ:

## ๋ฒ„๊ทธ ์„ค๋ช…
๋กœ๊ทธ์ธ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์—๋Ÿฌ ๋ฐœ์ƒ

## ์žฌํ˜„ ๋ฐฉ๋ฒ•
1. ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€ ์ด๋™
2. ์ด๋ฉ”์ผ/๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ
3. ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ ํด๋ฆญ
4. ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ํ™•์ธ

## ์˜ˆ์ƒ ๋™์ž‘
๋ฉ”์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™

## ํ™˜๊ฒฝ
- OS: macOS 14.0
- Browser: Chrome 120

๊ธฐ๋Šฅ ์š”์ฒญ:

## ๊ธฐ๋Šฅ ์„ค๋ช…
๋‹คํฌ ๋ชจ๋“œ ์ง€์›

## ํ•„์š”ํ•œ ์ด์œ 
๋ˆˆ์˜ ํ”ผ๋กœ ๊ฐ์†Œ

## ์ถ”๊ฐ€ ์ •๋ณด
(๋””์ž์ธ ์ฐธ๊ณ  ์ž๋ฃŒ ๋“ฑ)

Issue์™€ PR ์—ฐ๊ฒฐ

# PR ์„ค๋ช…์—์„œ ์ด์Šˆ ์ฐธ์กฐ
Fixes #42
Closes #42
Resolves #42

# ์œ„ ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ ์‹œ PR ๋จธ์ง€๋˜๋ฉด ์ด์Šˆ ์ž๋™ ์ข…๋ฃŒ

6. GitHub ํ˜‘์—… ์‹ค์Šต

์‹ค์Šต 1: ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜

# 1. ์—ฐ์Šต์šฉ ์ €์žฅ์†Œ Fork (GitHub ์›น์—์„œ)
# https://github.com/octocat/Spoon-Knife

# 2. Forkํ•œ ์ €์žฅ์†Œ ํด๋ก 
git clone git@github.com:myname/Spoon-Knife.git
cd Spoon-Knife

# 3. upstream ์„ค์ •
git remote add upstream git@github.com:octocat/Spoon-Knife.git

# 4. ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ
git switch -c my-contribution

# 5. ํŒŒ์ผ ์ˆ˜์ •
echo "My name is here!" >> contributors.txt

# 6. ์ปค๋ฐ‹ & ํ‘ธ์‹œ
git add .
git commit -m "Add my name to contributors"
git push origin my-contribution

# 7. GitHub์—์„œ Pull Request ์ƒ์„ฑ

์‹ค์Šต 2: ํŒ€ ํ˜‘์—… ์‹œ๋‚˜๋ฆฌ์˜ค

# === ํŒ€์› A (์ €์žฅ์†Œ ๊ด€๋ฆฌ์ž) ===
# 1. ์ €์žฅ์†Œ ์ƒ์„ฑ ๋ฐ ์ดˆ๊ธฐ ์„ค์ •
mkdir team-project
cd team-project
git init
echo "# Team Project" > README.md
git add .
git commit -m "initial commit"
git remote add origin git@github.com:teamA/team-project.git
git push -u origin main

# 2. Collaborator ์ถ”๊ฐ€ (GitHub Settings > Collaborators)

# === ํŒ€์› B ===
# 1. ์ €์žฅ์†Œ ํด๋ก 
git clone git@github.com:teamA/team-project.git
cd team-project

# 2. ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…
git switch -c feature/login
echo "login feature" > login.js
git add .
git commit -m "feat: ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„"
git push origin feature/login

# 3. GitHub์—์„œ PR ์ƒ์„ฑ

# === ํŒ€์› A ===
# 1. PR ๋ฆฌ๋ทฐ ๋ฐ ๋จธ์ง€
# 2. ๋จธ์ง€ ํ›„ ๋กœ์ปฌ ์—…๋ฐ์ดํŠธ
git pull origin main

7. ์œ ์šฉํ•œ GitHub ๊ธฐ๋Šฅ

Labels (๋ผ๋ฒจ)

์ด์Šˆ/PR ๋ถ„๋ฅ˜: - bug: ๋ฒ„๊ทธ - enhancement: ๊ธฐ๋Šฅ ๊ฐœ์„  - documentation: ๋ฌธ์„œ - good first issue: ์ž…๋ฌธ์ž์šฉ

Milestones (๋งˆ์ผ์Šคํ†ค)

์ด์Šˆ๋“ค์„ ๋ฒ„์ „/์Šคํ”„๋ฆฐํŠธ๋กœ ๊ทธ๋ฃนํ™”

Projects (ํ”„๋กœ์ ํŠธ ๋ณด๋“œ)

์นธ๋ฐ˜ ๋ณด๋“œ ์Šคํƒ€์ผ๋กœ ์ž‘์—… ๊ด€๋ฆฌ: - To Do - In Progress - Done

GitHub Actions

์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ:

# .github/workflows/ci.yml
name: CI
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run tests
        run: npm test

๋ช…๋ น์–ด ์š”์•ฝ

๋ช…๋ น์–ด ์„ค๋ช…
git remote add upstream URL ์›๋ณธ ์ €์žฅ์†Œ ์ถ”๊ฐ€
git fetch upstream ์›๋ณธ ๋ณ€๊ฒฝ ๊ฐ€์ ธ์˜ค๊ธฐ
git merge upstream/main ์›๋ณธ๊ณผ ๋ณ‘ํ•ฉ
git push origin ๋ธŒ๋žœ์น˜ Fork์— ํ‘ธ์‹œ

ํ•ต์‹ฌ ์šฉ์–ด ์ •๋ฆฌ

์šฉ์–ด ์„ค๋ช…
Fork ์ €์žฅ์†Œ๋ฅผ ๋‚ด ๊ณ„์ •์œผ๋กœ ๋ณต์‚ฌ
Pull Request ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋ฐ˜์˜ ์š”์ฒญ
Code Review ์ฝ”๋“œ ๊ฒ€ํ† 
Merge ๋ธŒ๋žœ์น˜/PR ๋ณ‘ํ•ฉ
Issue ๋ฒ„๊ทธ/๊ธฐ๋Šฅ ์š”์ฒญ ๊ด€๋ฆฌ
upstream ์›๋ณธ ์ €์žฅ์†Œ
origin ๋‚ด ์›๊ฒฉ ์ €์žฅ์†Œ

ํ•™์Šต ์™„๋ฃŒ!

Git/GitHub ๊ธฐ์ดˆ ํ•™์Šต์„ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฃผ์ œ๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์— ์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ ์—ฐ์Šตํ•ด๋ณด์„ธ์š”!

์ถ”์ฒœ ์—ฐ์Šต

  1. GitHub์—์„œ ๊ด€์‹ฌ ์žˆ๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ ์ฐพ๊ธฐ
  2. ๋ฌธ์„œ ์˜คํƒ€ ์ˆ˜์ •์œผ๋กœ ์ฒซ ๊ธฐ์—ฌ ์‹œ๋„
  3. ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ๋ฅผ GitHub์— ์˜ฌ๋ฆฌ๊ณ  ๊ด€๋ฆฌ
to navigate between lessons