Skip to content

AutowiniFront/git-training

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

14 Commits
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Git์— ๋Œ€ํ•œ ์ดํ•ด & ์„ค์น˜

Book

  • GitHub ๊ณ„์ • ๋งŒ๋“ค๊ธฐ
  • Sourcetree ๋ฅผ ์„ค์น˜
    • ์ž‘์—…์€ ๋ฐ˜๋“œ์‹œ ํ„ฐ๋ฏธ๋„์—์„œ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. Sourcetree์™€ ๊ฐ™์€ GUI๋„๊ตฌ๋Š” ์ค‘๊ฐ„์— ๊ณผ์ •์„ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.
    • ๊ทธ๋Ÿฌ๋‚˜ ๋ญ”๊ฐ€๋ฅผ ํ•  ๋•Œ๋งˆ๋‹ค Sourcetree๋ฅผ ๊ณ„์† ๋ณด์‹œ๋ฉด Git์— ๋Œ€ํ•ด ์•Œ ์ˆ˜ ์žˆ๊ณ , ๋ฌด์Šจ ์ผ์ด ๋ฒŒ์–ด์ง€๊ณ  ์žˆ๋Š”์ง€๋„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Git Style Guide ์ˆ™์ง€

ikaruce/git-style-guide

ํ„ฐ๋ฏธ๋„ ํ™˜๊ฒฝ ์„ค์ •

  • Windows
  • Mac
    • iterm2 ์„ค์น˜ ํ›„ iterm ํ„ฐ๋ฏธ๋„์—์„œ ์ง„ํ–‰
    • brew install --cask iterm2

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

์ƒˆ ์ €์žฅ์†Œ ๋งŒ๋“ค๊ณ  ์‹œ์ž‘ํ•˜๊ธฐ

mkdir <์ƒ์„ฑํ•˜๊ณ  ์‹ถ์€ ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„>
cd <์ƒ์„ฑํ•œ ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„>
git init

# ์˜ˆ)
~ $ mkdir test
~ $ cd test
~/test $ git init

์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์‹œ์ž‘ํ•˜๊ธฐ

git clone <์›๊ฒฉ ์ €์žฅ์†Œ ์ฃผ์†Œ>

# ์˜ˆ) git clone https://github.com/wholemann/daily-coding-dojo.git

Sourcetree์— ์ €์žฅ์†Œ ํด๋” ์ถ”๊ฐ€ํ•˜๊ธฐ

Sourcetree๋ฅผ ์‹คํ–‰ํ•ด ๋ฐฉ๊ธˆ ๋งŒ๋“ค๊ฑฐ๋‚˜ ๊ฐ€์ ธ์˜จ ํด๋”๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋ญ”๊ฐ€๋ฅผ ํ•  ๋•Œ๋งˆ๋‹ค Sourcetree๋ฅผ ๊ณ„์† ๋ณด์‹œ๋ฉด Git์— ๋Œ€ํ•ด ์•Œ ์ˆ˜ ์žˆ๊ณ , ๋ฌด์Šจ ์ผ์ด ๋ฒŒ์–ด์ง€๊ณ  ์žˆ๋Š”์ง€๋„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›๊ฒฉ ์ €์žฅ์†Œ ์ถ”๊ฐ€ํ•˜๊ธฐ

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

git remote

์›๊ฒฉ ์ €์žฅ์†Œ ์ •๋ณด ์ž์„ธํžˆ ๋ณด๊ธฐ

git remote -v

origin ์›๊ฒฉ ์ €์žฅ์†Œ ์ถ”๊ฐ€

์ฃผ์˜) clone์œผ๋กœ ์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉด origin ์›๊ฒฉ ์ €์žฅ์†Œ๊ฐ€ ์ด๋ฏธ ์ถ”๊ฐ€๋œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” git init ํ›„ ์ˆ˜๋™์œผ๋กœ ์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

git remote add origin <๋‚ด ๊ณ„์ •์˜ repository ์ฃผ์†Œ>

git fetch origin

upstream ์›๊ฒฉ ์ €์žฅ์†Œ ์ถ”๊ฐ€

git remote add upstream <PR์„ ๋ณด๋‚ผ ์›๊ฒฉ repository ์ฃผ์†Œ>

git fetch upstream

Pull Request๋ฅผ ์ด์šฉํ•œ ํ˜‘์—… ์‹œ์ž‘ํ•˜๊ธฐ

triangular-workflows

  • upstream - PR์„ ๋ณด๋‚ด๊ณ  ์‹ถ์€ repository(ํšŒ์‚ฌ์—์„  ์šฐ๋ฆฌํŒ€ repository)
  • origin - upstream์—์„œ ๋‚ด ๊ณ„์ •์œผ๋กœ forkํ•œ repository

Step #0

๋จผ์ € PR(Pull Request)๋ฅผ ๋ณด๋‚ด๊ณ  ์‹ถ์€ repository๋ฅผ fork ํ•ฉ๋‹ˆ๋‹ค. fork๋ฅผ ํ•˜๋ฉด ๋ณธ์ธ ๊ณ„์ •์˜ GitHub์— ๋™์ผํ•œ repository๊ฐ€ ๋ณต์‚ฌ๋ฉ๋‹ˆ๋‹ค.

github-fork

๋‚ด ๊ณ„์ •์— ๋™์ผํ•œ repository๊ฐ€ ๋ณต์ œ๋œ ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ ์ดˆ๋ก์ƒ‰ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ๋‚˜์˜ค๋Š” ์ฐฝ์—์„œ ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

forked-repository

๋ณต์‚ฌํ•œ ์ฃผ์†Œ๋ฅผ ์ด์šฉํ•˜๋ฉด ๋‚ด ๋กœ์ปฌ ๋จธ์‹ ์—์„œ clone ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์˜) clone์œผ๋กœ ์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉด origin ์›๊ฒฉ ์ €์žฅ์†Œ๊ฐ€ ์ด๋ฏธ ์ถ”๊ฐ€๋œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

git clone <๋‚ด ๊ณ„์ •์— fork๋œ repository ์ฃผ์†Œ>

git remote add upstream <PR์„ ๋ณด๋‚ผ ์›๊ฒฉ repository ์ฃผ์†Œ>

# ์˜ˆ)
git clone https://github.com/wholemann/git-training.git

git remote add upstream https://github.com/CodeSoom/git-training.git

PR์„ ๋ณด๋‚ด๋Š” ๊ณผ์ •์—์„œ ์›๊ฒฉ ์ €์žฅ์†Œ๋Š” upstream. origin 2๊ฐœ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ ๋จธ์‹ (๋‚ด ์ปดํ“จํ„ฐ) ๊ด€์ ์—์„œ ๋ณด๋ฉด ๋‚ด ๊ณ„์ •์˜ repository๋„ ์›๊ฒฉ์ด๊ณ , upstream์˜ repository๋„ ์›๊ฒฉ์ž…๋‹ˆ๋‹ค.

  • upstream - PR์„ ๋ณด๋‚ด๊ณ  ์‹ถ์€ repository(ํšŒ์‚ฌ์—์„  ์šฐ๋ฆฌํŒ€ repository)
  • origin - upstream์—์„œ ๋‚ด ๊ณ„์ •์œผ๋กœ forkํ•œ repository

git remote -v ๋ฅผ ํ†ตํ•ด upstream๊ณผ origin์ด ์•„๋ž˜์™€ ๊ฐ™์€์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

~/codesoom/git-training $ git remote -v
origin      git@github.com:wholemann/git-training.git (fetch)
origin      git@github.com:wholemann/git-training.git (push)
upstream      git@github.com:CodeSoom/git-training.git (fetch)
upstream      git@github.com:CodeSoom/git-training.git (push)

Step #1 - ์ž‘์—… ๋ธŒ๋žœ์น˜ ๋งŒ๋“ค๊ธฐ

git switch -c <๋ธŒ๋žœ์น˜ ์ด๋ฆ„> upstream/main

upstream/main๋Š” ๋ถ™์—ฌ์„œ ์“ฐ๊ณ , ๊ฐ€์šด๋ฐ ์Šฌ๋ž˜์‹œ(/)๊ฐ€ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.

๋ธŒ๋žœ์น˜ ์ด๋ฆ„์€ ์ž‘์—…ํ•œ ๋‚ด์šฉ์„ ํ‘œํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ex) login-oauth-apply

Step #2 - upstream ์›๊ฒฉ ์ €์žฅ์†Œ์˜ ์ตœ์‹  ์ƒํƒœ๋ฅผ ๋ฐ˜์˜ํ•˜๊ธฐ

git fetch

fetch(๊ฐ€์ ธ์˜ค๊ธฐ)

git rebase

rebase๋กœ ๋ณ‘ํ•ฉํ•˜๊ธฐ

git fetch upstream

git rebase upstream/main

Step #3 - ์ž‘์—…ํ•˜๊ธฐ

์›ํ•˜๋Š” ์ž‘์—…์„ ์ด ์‹œ์ ์— ํ•ฉ๋‹ˆ๋‹ค.

Step #4 - ์ปค๋ฐ‹

๋ญ”๊ฐ€ ๋ฐ”๋€ ์ ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ํŒŒ์ผ ์ถ”๊ฐ€/๋ณ€๊ฒฝ/์‚ญ์ œ๋ž€ โ€œ๋ฐ”๋€ ์ โ€์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

git add .

๋ฐฉ๊ธˆ ์ถ”๊ฐ€ํ•œ ๋ฐ”๋€ ์ ์„ ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€๋Šฅํ•˜๋ฉด ๋ฉ”์‹œ์ง€๋ฅผ ์šฐ๋ฆฌ๊ฐ€ ๋‚˜์ค‘์— ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ์”๋‹ˆ๋‹ค.

git commit

Git commit message style guide

๋ฐ˜๋“œ์‹œ ์ˆ™์ง€ํ•˜๊ณ  ์ง€ํ‚ค๋ ค๊ณ  ๋…ธ๋ ฅํ•ฉ์‹œ๋‹ค.

์ข‹์€ git ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ 8๊ฐ€์ง€ ์•ฝ์†

Commit Message Style Guide For Git

git commit ์—๋””ํ„ฐ๋Š” vi ์—๋””ํ„ฐ๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ์”๋‹ˆ๋‹ค.

์ฃผ์˜) git commit -m "message" ๋Š” ์“ฐ์ง€ ๋งˆ์„ธ์š”. -m์€ anti pattern์ž…๋‹ˆ๋‹ค.

Vi ์—๋””ํ„ฐ๋ฅผ ์ด์šฉํ•œ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ž‘์„ฑ ๋ฐฉ๋ฒ•

Step #5 - origin ์›๊ฒฉ ์ €์žฅ์†Œ์— ์ž‘์—… ๋ธŒ๋žœ์น˜ ์˜ฌ๋ฆฌ๊ธฐ

git push origin <๋ธŒ๋žœ์น˜ ์ด๋ฆ„>

origin๊ณผ <๋ธŒ๋žœ์น˜ ์ด๋ฆ„> ์‚ฌ์ด์—” ๊ณต๋ฐฑ์ด ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.

Step #6 - Pull Request

GitHub์—์„œ New Pull Request๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

images/1.png

images/2.png

images/3.png

images/4.png

images/5.png

์ž‘์—… ์ˆ˜์ •ํ•˜๊ธฐ

Pull Request๋ฅผ ํ–ˆ์ง€๋งŒ ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋‚ด์šฉ์„ ๋ณด๊ณ  ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์น  ๋•Œ๊ฐ€ ๋งŽ์€๋ฐ, ํ•ด๋‹น ๋ธŒ๋žœ์น˜์— ๊ฐ€์„œ Commit์„ ์ถ”๊ฐ€ํ•˜๊ณ  Push๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Step #1 - ํ•ด๋‹น ๋ธŒ๋žœ์น˜๋กœ ์ด๋™ํ•˜๊ธฐ

git switch <๋ธŒ๋žœ์น˜ ์ด๋ฆ„>

Step #2 - ์ˆ˜์ •ํ•˜๊ธฐ

๋ณ€๊ฒฝ ์ž‘์—…์„ ์ด ์‹œ์ ์— ํ•ฉ๋‹ˆ๋‹ค.

Step #3 - ์ปค๋ฐ‹

๋ญ”๊ฐ€ ๋ฐ”๋€ ์ ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ํŒŒ์ผ ์ถ”๊ฐ€/๋ณ€๊ฒฝ/์‚ญ์ œ๋ž€ โ€œ๋ฐ”๋€ ์ โ€์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

git add .

๋ฐฉ๊ธˆ ์ถ”๊ฐ€ํ•œ ๋ฐ”๋€ ์ ์„ ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€๋Šฅํ•˜๋ฉด ๋ฉ”์‹œ์ง€๋ฅผ ์šฐ๋ฆฌ๊ฐ€ ๋‚˜์ค‘์— ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ์”๋‹ˆ๋‹ค.

git commit

Step #4 - origin ์›๊ฒฉ ์ €์žฅ์†Œ์— ์ž‘์—… ๋ธŒ๋žœ์น˜ ์˜ฌ๋ฆฌ๊ธฐ

git push origin <๋ธŒ๋žœ์น˜ ์ด๋ฆ„>

Step #5 - Pull Request๊ฐ€ ๋ฐ”๋€ ๊ฒƒ ํ™•์ธํ•˜๊ธฐ

๋ญ”๊ฐ€ ์ƒˆ๋กœ์šด ์ž‘์—…์„ ํ•˜์ง€ ์•Š์•„๋„ Pull Request๊ฐ€ ๋ฐ”๋€ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Merge๋œ ๋ธŒ๋žœ์น˜ ์ •๋ฆฌํ•˜๊ธฐ

Step #1 - ๋‚ด ์ปดํ“จํ„ฐ์˜ main ๋ธŒ๋žœ์น˜์— ์ตœ์‹  ์ฝ”๋“œ ๋ฐ˜์˜ํ•˜๊ธฐ

main ๋ธŒ๋žœ์น˜๋กœ ์ด๋™

git switch main

์ตœ์‹  ์ฝ”๋“œ ๋ฐ˜์˜

git fetch upstream

git rebase upstream/main

origin ์›๊ฒฉ ์ €์žฅ์†Œ์— main ๋ธŒ๋žœ์น˜๋ฅผ ์˜ฌ๋ ค๋ณด๊ธฐ (ํ•„์ˆ˜๋Š” ์•„๋‹ˆ์ง€๋งŒ ๊ธฐ๋ถ„์ด ์ข‹์•„์ง)

git push origin main

Step #2 - Merge๋œ ๋ธŒ๋žœ์น˜ ํ™•์ธ

๋‚ด ์ปดํ“จํ„ฐ์— ์žˆ๋Š” ๋ธŒ๋žœ์น˜ ์ค‘ Merge๋œ ๊ฒƒ ๋ณด๊ธฐ

์ด ๋ชฉ๋ก์— main๋„ ํฌํ•จ๋œ๋‹ค๋Š” ์ ์— ์ฃผ์˜!

git branch --merge

๋‚ด ์ปดํ“จํ„ฐ์™€ ์›๊ฒฉ ์ €์žฅ์†Œ์— ์žˆ๋Š” ๋ธŒ๋žœ์น˜ ์ค‘ Merge๋œ ๊ฒƒ ๋ณด๊ธฐ

์ด ๋ชฉ๋ก์— main๋„ ํฌํ•จ๋œ๋‹ค๋Š” ์ ์— ์ฃผ์˜!

git branch -a --merge

Step #3 - ๋‚ด ์ปดํ“จํ„ฐ์˜ ๋ธŒ๋žœ์น˜ ์‚ญ์ œ

์•ˆ์ „ํ•˜๊ฒŒ ์‚ญ์ œ

git branch -d <๋ธŒ๋žœ์น˜ ์ด๋ฆ„>

๊ฐ•์ œ๋กœ ์‚ญ์ œ

git branch -D <๋ธŒ๋žœ์น˜ ์ด๋ฆ„>

Step #4 - fork๋œ ๋‚˜์˜ ์›๊ฒฉ ์ €์žฅ์†Œ ๋ธŒ๋žœ์น˜ ์‚ญ์ œ

git push origin :<๋ธŒ๋žœ์น˜ ์ด๋ฆ„>

PR ํŠธ๋ ˆ์ด๋‹ ๋ฏธ์…˜

https://github.com/CodeSoom/git-training

Pull Request๋ฅผ ์ด์šฉํ•œ ํ˜‘์—… ์‹œ์ž‘ํ•˜๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ, ๊ฐ์ž ์ด๋‹ˆ์…œ๋กœ ๋งŒ๋“  ๋ฌธ์„œ ํŒŒ์ผ(์˜ˆ) csh.md)์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์œ„์˜ repository์— Pull Request๋ฅผ ๋‚ ๋ ค๋ด…๋‹ˆ๋‹ค.

์ฐธ๊ณ  ์ž๋ฃŒ

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published