GitHub ์‹œ์ž‘ํ•˜๊ธฐ

GitHub ์‹œ์ž‘ํ•˜๊ธฐ

1. GitHub์ด๋ž€?

GitHub์€ Git ์ €์žฅ์†Œ๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ์›น ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

GitHub์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

  • ์›๊ฒฉ ์ €์žฅ์†Œ: ์ฝ”๋“œ๋ฅผ ํด๋ผ์šฐ๋“œ์— ๋ฐฑ์—…
  • ํ˜‘์—… ๋„๊ตฌ: Pull Request, Issues, Projects
  • ์†Œ์…œ ์ฝ”๋”ฉ: ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž์˜ ์ฝ”๋“œ ํƒ์ƒ‰ ๋ฐ ๊ธฐ์—ฌ
  • CI/CD: GitHub Actions๋กœ ์ž๋™ํ™”

GitHub ๊ณ„์ • ๋งŒ๋“ค๊ธฐ

  1. github.com ์ ‘์†
  2. "Sign up" ํด๋ฆญ
  3. ์ด๋ฉ”์ผ, ๋น„๋ฐ€๋ฒˆํ˜ธ, ์‚ฌ์šฉ์ž๋ช… ์ž…๋ ฅ
  4. ์ด๋ฉ”์ผ ์ธ์ฆ ์™„๋ฃŒ

2. SSH ํ‚ค ์„ค์ • (๊ถŒ์žฅ)

SSH ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋งค๋ฒˆ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

SSH ํ‚ค ์ƒ์„ฑ

# SSH ํ‚ค ์ƒ์„ฑ (์ด๋ฉ”์ผ์€ GitHub ๊ณ„์ • ์ด๋ฉ”์ผ)
ssh-keygen -t ed25519 -C "your_email@example.com"

# ๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ ์ง„ํ–‰ (Enter 3๋ฒˆ)

SSH ํ‚ค ํ™•์ธ

# ๊ณต๊ฐœ ํ‚ค ์ถœ๋ ฅ
cat ~/.ssh/id_ed25519.pub

GitHub์— SSH ํ‚ค ๋“ฑ๋ก

  1. GitHub โ†’ Settings โ†’ SSH and GPG keys
  2. "New SSH key" ํด๋ฆญ
  3. ๊ณต๊ฐœ ํ‚ค ๋‚ด์šฉ ๋ถ™์—ฌ๋„ฃ๊ธฐ
  4. "Add SSH key" ํด๋ฆญ

์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ

ssh -T git@github.com

# ์„ฑ๊ณต ์‹œ ์ถœ๋ ฅ:
# Hi username! You've successfully authenticated...

3. ์›๊ฒฉ ์ €์žฅ์†Œ ์—ฐ๊ฒฐ

์ƒˆ ์ €์žฅ์†Œ๋ฅผ GitHub์— ์˜ฌ๋ฆฌ๊ธฐ

# 1. GitHub์—์„œ ์ƒˆ ์ €์žฅ์†Œ ์ƒ์„ฑ (๋นˆ ์ €์žฅ์†Œ๋กœ)

# 2. ๋กœ์ปฌ์—์„œ ์›๊ฒฉ ์ €์žฅ์†Œ ์ถ”๊ฐ€
git remote add origin git@github.com:username/repository.git

# 3. ์ฒซ ๋ฒˆ์งธ ํ‘ธ์‹œ
git push -u origin main

๊ธฐ์กด GitHub ์ €์žฅ์†Œ ๋ณต์ œ

# SSH ๋ฐฉ์‹ (๊ถŒ์žฅ)
git clone git@github.com:username/repository.git

# HTTPS ๋ฐฉ์‹
git clone https://github.com/username/repository.git

# ํŠน์ • ํด๋”๋ช…์œผ๋กœ ๋ณต์ œ
git clone git@github.com:username/repository.git my-folder

4. ์›๊ฒฉ ์ €์žฅ์†Œ ๊ด€๋ฆฌ

์›๊ฒฉ ์ €์žฅ์†Œ ํ™•์ธ

# ์›๊ฒฉ ์ €์žฅ์†Œ ๋ชฉ๋ก
git remote

# ์ƒ์„ธ ์ •๋ณด
git remote -v

์ถœ๋ ฅ ์˜ˆ์‹œ:

origin  git@github.com:username/repo.git (fetch)
origin  git@github.com:username/repo.git (push)

์›๊ฒฉ ์ €์žฅ์†Œ ์ถ”๊ฐ€/์‚ญ์ œ

# ์ถ”๊ฐ€
git remote add origin URL

# ์‚ญ์ œ
git remote remove origin

# URL ๋ณ€๊ฒฝ
git remote set-url origin ์ƒˆURL

5. Push - ๋กœ์ปฌ โ†’ ์›๊ฒฉ

๋กœ์ปฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์›๊ฒฉ ์ €์žฅ์†Œ์— ์—…๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

# ๊ธฐ๋ณธ ํ‘ธ์‹œ
git push origin ๋ธŒ๋žœ์น˜๋ช…

# main ๋ธŒ๋žœ์น˜ ํ‘ธ์‹œ
git push origin main

# ์ฒซ ํ‘ธ์‹œ ์‹œ -u ์˜ต์…˜ (upstream ์„ค์ •)
git push -u origin main

# upstream ์„ค์ • ํ›„์—๋Š” ๊ฐ„๋‹จํžˆ
git push

ํ‘ธ์‹œ ํ๋ฆ„๋„

๋กœ์ปฌ                              ์›๊ฒฉ (GitHub)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Working Dir โ”‚                  โ”‚             โ”‚
โ”‚     โ†“       โ”‚                  โ”‚             โ”‚
โ”‚ Staging     โ”‚     git push     โ”‚  Remote     โ”‚
โ”‚     โ†“       โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ถ โ”‚  Repository โ”‚
โ”‚ Local Repo  โ”‚                  โ”‚             โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

6. Pull - ์›๊ฒฉ โ†’ ๋กœ์ปฌ

์›๊ฒฉ ์ €์žฅ์†Œ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋กœ์ปฌ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

# ์›๊ฒฉ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๊ฐ€์ ธ์˜ค๊ธฐ + ๋ณ‘ํ•ฉ
git pull origin main

# upstream ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด
git pull

Fetch vs Pull

๋ช…๋ น์–ด ๋™์ž‘
git fetch ์›๊ฒฉ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋‹ค์šด๋กœ๋“œ๋งŒ
git pull fetch + merge (๋‹ค์šด๋กœ๋“œ + ๋ณ‘ํ•ฉ)
# fetch ํ›„ ํ™•์ธํ•˜๊ณ  ๋ณ‘ํ•ฉ
git fetch origin
git log origin/main  # ์›๊ฒฉ ๋ณ€๊ฒฝ ํ™•์ธ
git merge origin/main

# ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌ
git pull origin main

7. ์›๊ฒฉ ๋ธŒ๋žœ์น˜ ์ž‘์—…

์›๊ฒฉ ๋ธŒ๋žœ์น˜ ํ™•์ธ

# ๋ชจ๋“  ๋ธŒ๋žœ์น˜ (๋กœ์ปฌ + ์›๊ฒฉ)
git branch -a

# ์›๊ฒฉ ๋ธŒ๋žœ์น˜๋งŒ
git branch -r

์›๊ฒฉ ๋ธŒ๋žœ์น˜ ๊ฐ€์ ธ์˜ค๊ธฐ

# ์›๊ฒฉ ๋ธŒ๋žœ์น˜๋ฅผ ๋กœ์ปฌ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ
git switch -c feature origin/feature

# ๋˜๋Š”
git checkout -t origin/feature

์›๊ฒฉ ๋ธŒ๋žœ์น˜ ์‚ญ์ œ

# ์›๊ฒฉ ๋ธŒ๋žœ์น˜ ์‚ญ์ œ
git push origin --delete ๋ธŒ๋žœ์น˜๋ช…

8. ์‹ค์Šต ์˜ˆ์ œ: ์ „์ฒด ์›Œํฌํ”Œ๋กœ์šฐ

GitHub์— ์ƒˆ ํ”„๋กœ์ ํŠธ ์˜ฌ๋ฆฌ๊ธฐ

# 1. ๋กœ์ปฌ์—์„œ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
mkdir my-github-project
cd my-github-project
git init

# 2. ํŒŒ์ผ ์ƒ์„ฑ ๋ฐ ์ปค๋ฐ‹
echo "# My GitHub Project" > README.md
echo "node_modules/" > .gitignore
git add .
git commit -m "initial commit"

# 3. GitHub์—์„œ ์ƒˆ ์ €์žฅ์†Œ ์ƒ์„ฑ (์›น์—์„œ)
# - New repository ํด๋ฆญ
# - ์ด๋ฆ„ ์ž…๋ ฅ: my-github-project
# - ๋นˆ ์ €์žฅ์†Œ๋กœ ์ƒ์„ฑ (README ์ฒดํฌ ํ•ด์ œ)

# 4. ์›๊ฒฉ ์ €์žฅ์†Œ ์—ฐ๊ฒฐ ๋ฐ ํ‘ธ์‹œ
git remote add origin git@github.com:username/my-github-project.git
git push -u origin main

# 5. GitHub์—์„œ ํ™•์ธ!

ํ˜‘์—… ์‹œ๋‚˜๋ฆฌ์˜ค

# ํŒ€์› A: ๋ณ€๊ฒฝ ํ›„ ํ‘ธ์‹œ
echo "Feature A" >> features.txt
git add .
git commit -m "feat: Feature A ์ถ”๊ฐ€"
git push

# ํŒ€์› B: ์ตœ์‹  ์ฝ”๋“œ ๋ฐ›๊ธฐ
git pull

# ํŒ€์› B: ์ž์‹ ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ถ”๊ฐ€
echo "Feature B" >> features.txt
git add .
git commit -m "feat: Feature B ์ถ”๊ฐ€"
git push

์ถฉ๋Œ ๋ฐœ์ƒ ์‹œ

# ํ‘ธ์‹œ ์‹œ๋„ - ๊ฑฐ๋ถ€๋จ
git push
# ์ถœ๋ ฅ: rejected... fetch first

# ํ•ด๊ฒฐ: pull ๋จผ์ €
git pull

# ์ถฉ๋Œ ์žˆ์œผ๋ฉด ํ•ด๊ฒฐ ํ›„
git add .
git commit -m "merge: ์ถฉ๋Œ ํ•ด๊ฒฐ"
git push

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

๋ช…๋ น์–ด ์„ค๋ช…
git remote -v ์›๊ฒฉ ์ €์žฅ์†Œ ํ™•์ธ
git remote add origin URL ์›๊ฒฉ ์ €์žฅ์†Œ ์ถ”๊ฐ€
git clone URL ์ €์žฅ์†Œ ๋ณต์ œ
git push origin ๋ธŒ๋žœ์น˜ ๋กœ์ปฌ โ†’ ์›๊ฒฉ
git push -u origin ๋ธŒ๋žœ์น˜ ํ‘ธ์‹œ + upstream ์„ค์ •
git pull ์›๊ฒฉ โ†’ ๋กœ์ปฌ (fetch + merge)
git fetch ์›๊ฒฉ ๋ณ€๊ฒฝ ๋‹ค์šด๋กœ๋“œ๋งŒ

๋‹ค์Œ ๋‹จ๊ณ„

05_GitHub_Collaboration.md์—์„œ Fork, Pull Request, Issues๋ฅผ ํ™œ์šฉํ•œ ํ˜‘์—… ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›Œ๋ด…์‹œ๋‹ค!

to navigate between lessons