GIT
Intro
Git ๊ณผ Git Hub?
Git: local ์ ์ฅ์ ๋ง๋ค๊ณ ํ์ผ, ์ฝ๋ ๋ฑ ๊ด๋ฆฌ
GitHub:
๋ด๊ฐ local์์ ๊ด๋ฆฌํ๋ ์๋ฃ(git์ผ๋ก ๋ฒ์ ๊ด๋ฆฌํ ์ฝ๋)๋ฅผ ๋ค๋ฅธ ์ฌ๋๊ณผ ๊ณต์ ํ๊ฑฐ๋ ๋ฐฑ์ ํ ์ ์๋ ํด๋ผ์ฐ๋ ์๋ฒ.
๋ฐ๋๋ก ๋ค๋ฅธ ์ฌ๋์ด github์ ์ฌ๋ฆฐ ์๋ฃ๋ฅผ ๋ณต์ ํด์ค๊ฑฐ๋, ์ด๋ค ์ปค๋ฐ, ์ด๋ค ์์ค ์ฝ๋ ์ฌ์ฉํ๋์ง ํ์ธ ๋ฐ ๋ฐ์๊ฐ๋ฅ
๋ด๊ฐ git์ผ๋ก ๊ด๋ฆฌํ๋ ํ์ผ์ ๋ฐฑ์ ํ ์ ์์.
๊ณต๋ ํ์ ํ์ ๊ฐ๋ฅ
Curriculum
Git ๊ณผ ๋ฒ์ ๊ด๋ฆฌ
Git & GitHub - CLI
Git & GitHub - GUI
ํ๊ฒฝ ์ค์ ํ๊ธฐ
๋ฒ์ ๊ด๋ฆฌ๊ฐ ๋ญ๊ฐ์?
์ํ๋ ์์ ๋ง๋ค ๋ฒ์ ์ ๋ง๋ค๊ณ , ์ด๋ค ๊ฐ์ ์์ ๋กญ๊ฒ ๋์๋ค๋๋ค.
๋ด๊ฐ ๋ง๋ ๋ฒ์ ๋ฟ๋ง ์๋๋ผ, ๋๋ฃ๊ฐ ๋ง๋ ๋ฒ์ ์ผ๋ก ์ด๋ํ ์ ์๊ณ
๋๋ฃ์ ๋ด ๋ฒ์ ์ ๋น๊ตํด์ ์ต์ ๋ณธ์ผ๋ก ์ฝ๋๋ฅผ ์ ๋ฐ์ดํธ ํ ์ ์๋ค.
GitHub์ ์ฝ๋๋ฅผ ์ฌ๋ฆฌ๋ ๊ณผ์ (flow)
๋ด ์ปดํจํฐ ํ๋ก์ ํธ ํด๋์ git ์ธ ๊ฑฐ๋ผ๊ณ ๋ช ๋ น
git init
์ฝ๋ฉ
๋ณ๊ฒฝ ํ์ผ ์ค ์ฌ๋ฆฌ๊ธฐ ์ํ๋ ๊ฒ๋ง ์ ํ
git add
์ ํํ ํ์ผ๋ค ํ ๋ฉ์ด๋ฆฌ๋ก ๋ง๋ค๊ณ ์ค๋ช ์ ๊ธฐ
git commit -m message
GitHub์ฌ์ดํธ์ ํ๋ก์ ํธ ์ ์ฅ์ ๋ง๋ค๊ธฐ(๋ธ๋ก๊ทธ ๋ง๋๋ ๊ฒ์ฒ๋ผ)
๋ด ์ปดํจํฐ ํ๋ก์ ํธ ํด๋์ GitHub ์ ์ฅ์ ์ฃผ์ ์๋ ค์ฃผ๊ธฐ
git remote add
๋ด ์ปดํจํฐ์ ๋ง๋ค์๋ ๋ฉ์ด๋ฆฌ GitHub์ ์ฌ๋ฆฌ๊ธฐ
git push
CLI ๋ก GIT ๊ธฐ์ด ์ตํ๊ธฐ
๊น ์ด๊ธฐํ์ ๋ก์ปฌ ์ ์ฅ์ (
git init
)์ํ๋ ํด๋(boxiting-cat)์์ git ์ด๊ธฐํ (
git init
).git ์จ๊ฒจ์ง ํด๋ == ๋ก์ปฌ ์ ์ฅ์
๋ก์ปฌ ์ ์ฅ์์ ๋ด๊ฐ ๋ง๋ ๋ฒ์ ์ ๋ณด, ์๊ฒฉ ์ ์ฅ์ ์ฃผ์ ๋ฑ์ด ์ ์ฅ๋จ
์๊ฒฉ ์ ์ฅ์์์ ๋ด ์ปดํจํฐ๋ก ์ฝ๋๋ฅผ ๋ฐ์์ค๋ฉด ๋ก์ปฌ ์ ์ฅ์๊ฐ ์๋์ผ๋ก ์๊น
์ฃผ์์ : ํ ํด๋์ ํ๋์ ๋ก์ปฌ ์ ์ฅ์๋ง ์ ์งํ ๊ฒ!
์ฒซ๋ฒ ์งธ ๋ฒ์ ๋ง๋ค๊ธฐ (
git add
,git commit
,git log
)
์ปค๋ฐ(commit) == ํ๋์ ๋ฒ์
์ค์ต
๊น ์ด๊ธฐํ ํ ํด๋ ๋ด๋ถ(boxiting-cat)์ README.md, index.html ํ์ผ์์ฑ
์ํ๋ ํ์ผ๋ง ์ ํํ๊ธฐ /์ ์ฒด ํ์ผ ์ ํํ๊ธฐ
git add README.md
/git add .
๋ฉ์ธ์ง๋ฅผ ๋ฌ์ ์ปค๋ฐ์ผ๋ก ๋ง๋ค๊ธฐ
git commit -m "ํ๋ก์ ํธ ์ค๋ช ํ์ผ ์ถ๊ฐ"
์์ฑํ ์ปค๋ฐ ๋ณด๊ธฐ
git log
์ปค๋ฐ ์ ์ฃผ์
์๋ฏธ ์๋ ๋ณ๋ ์ฌํญ์ ๋ฌถ์ด์ ๋ง๋ค ๊ฒ.
๋๋ฃ ๊ฐ๋ฐ์ ํน์ ๋ฏธ๋์ ๋ด๊ฐ ์ด๋ค ํ์ผ์ ์์ ํ๋์ง ์์ฝ๊ฒ ์ฐพ์ ์ ์๋ค.
์ปค๋ฐ ๋ฉ์ธ์ง๋ ๊ท์ฐฎ๋๋ผ๋ ์๊ฐ ๋ค์ฌ ์์ฑ(๋์ค์ ์ฐพ๊ธฐ ์ข๊ฒ)
๋ง๋ ๋ฒ์ GitHub์ ์ฌ๋ฆฌ๊ธฐ (
git remote add
,git push
)๋ก์ปฌ ์ ์ฅ์: ๋ด ์ปดํจํฐ์ ๋ฒ์ ๊ด๋ฆฌํ๋ ๊ณต๊ฐ
์๊ฒฉ ์ ์ฅ์: ๋ก์ปฌ ์ ์ฅ์์ ๋ฒ์ ๊ด๋ฆฌํ ์ฝ๋๋ฅผ ๊ณต์ ํ๋ ํด๋ผ์ฐ๋ ์๋ฒ
์ค์ต 1. GitHub์ ๋ก๊ทธ์ธ & repository(์ ์ฅ์) ์์ฑ 2. ๋ด ์ปดํจํฐ git ์ด๊ธฐํํ ํด๋์ GitHub ์ ์ฅ์ ์ฃผ์ ์๋ ค์ฃผ๊ธฐ
git remote add [์ํ๋์ด๋ฆ] https://github.com/์์ด๋/repository์ด๋ฆ.git
git remote add origin https://github.com/์์ด๋/repository์ด๋ฆ.git
3. ๋ง๋ ์ปค๋ฐ ํธ์ํ๊ธฐgit push origin master
origin(remote) ์ master(local (๋ธ๋์น)์ ์ ์ฅ๋commit๋ค์ด ์ฌ๋ผ๊ฐ์ง)
GitHub ์ฌ์ดํธ์ ์ฌ๋ผ๊ฐ ์ปค๋ฐ ํ์ธ
๋ค๋ฅธ ์ฌ๋ ์ ์ฅ์ ๋ฐ์์ค๊ธฐ (
git pull
)์๊ฒฉ ์ ์ฅ์๋ฅผ ๋ด ์ปดํจํฐ์ ๋ฐ์์ค๊ธฐ: ํด๋ก (
git clone
)์๊ฒฉ ์ ์ฅ์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ: ํ (
git pull
)๋ค๋ฅธ ์ฌ๋์ ์๊ฒฉ ์ ์ฅ์๋ก pushํ ๋๋ ์๊ฒฉ ์ ์ฅ์์ ๊ถํ์ด ์์ด์ผ ํ๋ค.
์ค์ต
์๋ก์ด ํด๋ ์์ฑ(boxiting-oct)
์ด์ ์ ๋ง๋ ์ ์ฅ์ ๋ฐ์์ค๊ธฐ
git clone https://github.com/์์ด๋/repo์ด๋ฆ.git .
๋ง์ง๋ง์ . ๋ถํ๋ฉด ํด๋น ๋๋ ํ ๋ฆฌ์ ์ ์ฅ์ ๋ฐ์
. ์๋ต์ repo์ด๋ฆ์ผ๋ก ์ ํด๋ ์์ฑํ ํ์์ ๋ค์ด๊ฐ์ง
cloneํด์ค๋ฉด ์๋์ผ๋ก .git ์์ฑ
zip ํ์ผ๋ก ๋ฐ์ ๊ฒฝ์ฐ .git์ด ์๊ธฐ ๋๋ฌธ์ ์ด๊ธฐํ, ์๊ฒฉ์ ์ฅ์ ์ง์ ๋ณ๋๋ก ํด์ผํจ.
open in desktop: GitHub desktop GUI
์ฐธ๊ณ : ๋ณธ ๊ฐ์์์๋ source tree ๋ก GUI ์ปจํธ๋กค
์ ๋ฐ์ดํธ ๋ ๋ฐ์ดํฐ๋ ํ(pull) ๋ช ๋ น์ด๋ก ๋ฐ์์ฌ ์ ์๋ค.
git pull origin master
๊ถ๊ธ์
์ปค๋ฐ ๊ฐ์ฒด์ ๋ฌด์์ด ์ ์ฅ๋ ๊น?
๋ ์ฌ๋์ด ๋ณ๋ ฌ๋ก ์ปค๋ฐ์ ๋ง๋ค๊ณ ์ถ์๋ ์ด๋กํ์ง?
๋ ์ฌ๋์ด ๋ง๋ ๋ฒ์ ์ ํฉ์น ์ ์์๊น?
๋จ์ด ๋ง๋ ์คํ ์์ค์๋ ์ด๋ป๊ฒ ๊ธฐ์ฌํ ์ ์์ง?
GUI๋ก GIT ๋ค์ง๊ธฐ
add & commit
๊น์์ ์ปค๋ฐ์ด๋?
๋ณ๊ฒฝ ์ฌํญ์ ๋ชจ์์ด ์๋! => ํ๋์ ์ต์ข ์ฝ๋ ๋ชจ์!!
๋ค๋ง ๊ธฐ์กด ์ปค๋ฐ๊ณผ ๋น๊ตํด์ ๋ณ๊ฒฝ๋ ํ์ผ์ด ์๋๋ฉด '๋ณ๊ฒฝ๋์ง ์์๋ค' ๊ณ ์ ์ฅํด์ ์ฉ๋์ด ๋ฌด๊ฒ์ง ์๋ค.
SVN์ ๋ฐ๋ก ์ด์ ์ปค๋ฐ๊ณผ์ ๋ณ๊ฒฝ์ฌํญ๋ง ์ ์ฅ
๊ทธ๋์ ์ปค๋ฐ๋น ์ฉ๋์ ๋ ๊ฐ๋ณ์ง๋ง, ํ ๋ฒ์ ์ ๋ณด๋ ค๋ฉด ์ฒ์๋ถํฐ ๊ณ์ฐํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ฆฌ๋ค.
Git์ ๋ฐ๋ก ์ด์ ์ปค๋ฐ๋ง ๋ณด๋ฉด ๋๋ค. (์๋ ๋น ๋ฅด๋ค.)
๋ธ๋์น(branch)
์ ๊ฐ์ด ์์ ํ๋ ค๋ฉด ์ฌ๋ฌ ์ค๋ก ์ปค๋ฐ์ ์์์ผ ํ ๊น?
ํ ์ค์์ ์์ ํ๋ฉด ์ถฉ๋์ด ๋ ์ ์๊ธฐ ๋๋ฌธ!
๋์์ ๋๊ฐ์ ์ฝ๋๋ฅผ ๊ณ ์น ๊ฐ๋ฅ์ฑ์ด ์์ผ๋๊น
n ์ค๋ก ์๊ณ ๋์ค์ ํฉ์น ์ ์์๊น?
ok. ์ถฉ๋์ด ๋๋๋ผ๋, ํฉ์น๋ ์์ ์ ๋ช ์์ ์ผ๋ก ์ถฉ๋ ํด๊ฒฐ ๊ฐ๋ฅ.
source tree
master: ๋ด ์ปดํจํฐ์๋ง ์๋ ๋ด์ฉ
origin/master: ์๊ฒฉ/๋ด์ปดํจํฐ์ ์๋ ๋ด์ฉ
HEAD: ๋ด๊ฐ ์ง๊ธ ์์ ํ๋ ๋ก์ปฌ ๋ธ๋์น
๋ง์ ๋ธ๋์น๋ค ์ค์์๋ ๋ด๊ฐ ์ด๋ค ๋ธ๋์น์ ์๋์ง ํ์ธ ๊ฐ๋ฅ
๋ธ๋์น ์นดํ ๊ณ ๋ฆฌ์ ๋ด๊ฐ ์์ฑํ ๋ธ๋์น๋ง ๋ณด์ ๋๋ค.
์๊ฒฉ ์ ์ฅ์ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ํด๋ฆญํด๋ณด์
๋ด๊ฐ ๋ง๋ ๋ธ๋์น ๋ฟ๋ง ์๋๋ผ ๋๋ฃ ๋ธ๋์น๋ ํ์ธ ๊ฐ๋ฅ.
๋๋ฃ ๋ธ๋์น ๋๋ธ ํด๋ฆญ ์ checkoutํ ์ ์๋ ์ฐฝ ๋ธ.
checkoutํ๋ฉด, ๋ธ๋์น ์นดํ ๊ณ ๋ฆฌ์ ๋๋ฃ ๋ธ๋์น๋ ํ์ธ ๊ฐ๋ฅ.
๋ธ๋์น ๋ง๋ค๊ธฐ
cat ๋ธ๋์น๋ฅผ ํ์ฌ ์์ ์ ๋ง๋ค์ด๋ผ. (HEAD๊ฐ ์๋ ์์น์)
git branch cat
cat ๋ธ๋์น๋ก ์ด๋ํด๋ผ.(HEAD๊ฐ cat์ผ๋ก ์ด๋)
git checkout cat
commit์ ์งํํ๋ฉด, cat ๋ธ๋์น๋ ์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๊ณ ,
๊ธฐ์กด master๋ธ๋์น๋ ๊ทธ๋๋ก ์๋ค. (HEAD๊ฐ cat์ ์๊ธฐ ๋๋ฌธ)
์ค์ต
boxiting-cat์ ์ฅ์: master์์ feat/main-page ๋ธ๋์น์์ฑ
feat/๊ธฐ๋ฅ์ด๋ฆ
์ด๋ ๊ฒ ์ฐ๋ฉด feat๊ฐ ํด๋์ฒ๋ผ ๋์ด์์ด์ ๋ง์ ๋ธ๋์น ๊ด๋ฆฌ์ ์ ์ฉํ๋ค.
ํ ์ฌ๋์ด ๊ฐ๋ฐํ๋ ๊ธฐ๋ฅ ๋ธ๋์น
ํน์ fix/๋ฒ๊ทธ์ด๋ฆ, hotfix/๊ธํ๋ฒ๊ทธ
์์ ์ด ๋๋๋ฉด, dev(ํน์ master)๋ธ๋์น๋ก PR ๋ณด๋ด๊ธฐ
dev ๋ธ๋์น์ ํผ์ง๋งํ ์์ ๋ชจ๋ ๋จธ์ง๋๋ฉด release, latest๋ก ๋จธ์ง์ํค๊ณ ์ด๋ฅผ ์ค์๋ฒ์ ๋ฐฐํฌ
์ง์ ์ปค๋ฐ์ feat(ํน์ fix, hotix)๋ธ๋์น์๋ง ํฉ๋๋ค.
dev๋ master, release ๋ธ๋์น์๋ ์ง์ ์ปค๋ฐํ์ง ๋ง๊ณ ๋จธ์ง๋งํฉ๋๋ค.
source tree์์ ํ์ฌ ๋ธ๋์น ํ์ธํ๊ณ ์ถ๋ค๋ฉด, bold(๋๊ป๊ฒ)์ฒ๋ฆฌ๋ ๋ถ๋ถ์ ์ฝ์ผ๋ฉด ๋๋ค.
์ปค๋ฐ์ถ๊ฐ
boxiting-oct์ ์ฅ์: pull๋ฐ๊ธฐ
master์์ feat/commit ๋ธ๋์น ์์ฑ
์ปค๋ฐ ์ถ๊ฐ
merge(ํฉ์น๊ธฐ)
flow
master ๋ธ๋์น์ ์ต์ ์ปค๋ฐ(base)์
oct ๋ธ๋์น์ ์ต์ ์ปค๋ฐ(compare,head)์ ํฉ์น๋ ค๊ณ ํ๋ค.
๊ธฐ๋ฅ ๊ฐ๋ฐ์ด ๋ง๋ฌด๋ฆฌ ๋๋ฉด, ๊ธฐ๋ฅ ๊ฐ๋ฐํ ๊ฒ์ master ๋ธ๋์น์ ํฉ์น๋ค.
rule
base๊ฐ ๋ master ๋ธ๋์น๋ก ์ด๋(head๋ฅผ master๋ก ์ด๋)
source tree์์๋ master๋ฅผ ๋๋ธํด๋ฆญ
compare ๋ธ๋์น(oct)๋ฅผ ๋์ ํฉ์น๊ณ ์ถ๋ค๊ณ ๋ช ๋ น
git merge oct
source tree์์๋ ํด๋น ๋ธ๋์น ์ฐ์ธก ํด๋ฆญ ํ ๋ณํฉ
์ข ๋ฅ
fast-forward merge
merge-commit
conflict
conflict(์ถฉ๋)
๋จธ์งํ ๋ ๋ ๋ฒ์ ์ด ๊ฐ์ ๊ณณ์ ์์ ํ๋ค๋ฉด ์ด๋ฅผ ์๋์ผ๋ก ๊ณ ์ณ ์ค์ผ ํ๋ค.
์๋์ ๊ฐ์ด base ์์ ์์ฑํ ๊ณณ๊ณผ, compare์์ ์์ฑํ ๊ณณ์ด ์ถฉ๋์ด ๋๋๋ฐ ์๋์ผ๋ก <<<<>>>> ๋ฅผ ์ง์ฐ๊ณ ๊ณ ์ณ์ฃผ๋ฉด ๋๋ค.
fork: ์ ์ฅ์ ํต์ฑ๋ก ๋ณต์ ํ๊ธฐ
์คํ์์ค์ ๊ธฐ์ฌํ๊ธฐ ์ํด collaborators ๋ฑ๋ก์ ๋ถํํ์ง ์๋๋ผ๋, ๋ด ์ ์ฅ์์ ํด๋น ์ ์ฅ์๋ฅผ ๋ณต์ (fork)ํด์ ๊ทธ๊ณณ์์ ์์ ๋กญ๊ฒ ์ปค๋ฐ, ํธ์ฌ ํ ํด๋น ์ ์ฅ์์ mergeํด ๋ฌ๋ผ๊ณ ์์ฒญ(pull request)ํ๋ฉด ๋๋ค.
pull request
rule
๋จธ์งํ๊ณ ์ถ์ ๋ ๋ธ๋์น๋ฅผ ์ ํํ๊ณ
์ด๋ค ๋ณ๊ฒฝ์ ํ๋์ง ์ ๋ชฉ๊ณผ ๋ด์ฉ์ ์ฐ๋ฉด ๋๋ค.
๋จ์ผ ์ ์ฅ์์์ ๋ณด๋ผ ์๋ ์๊ณ , ํฌํฌํ ์ ์ฅ์์์ ๋ณด๋ผ์๋ ์๋ค.
์ฝ๋ ํจ๊ป ์์ฑํ๋ ๋๋ฃ ์๋ค๋ฉด, ์ต๋ํ ์ง์ ๋จธ์งํ๋๊ฑด ํผํ๊ณ , ํ ๋ฆฌํ์คํธ๋ฅผ ํตํด ํ์.
๋๋ฃ๊ฐ ๋ด ํ ๋ฆฌํ(PR)์ ๋ณด๊ณ ์ฝ๋ ๋ฆฌ๋ทฐ ๊ฐ๋ฅ!
๋๋ฃ์ PR์ ์์ ์ด ํ์ํ๋ค๋ฉด ๋๊ธ ๋ฌ์ change request๋ฅผ ๋ณด๋ผ ์ ์์
์คํ ์์ค์ PR ๋ณด๋ผ๋์๋ ๊ธฐ์ฌ ์๋ด๋ฌธ์(contribution guide line)๋ฅผ ๋ฐ๋์ ์ฐธ๊ณ ํ ๊ฒ!!
๋ฐฉ๋ฒ
repository์์ new pull request ํด๋ฆญ
base์ compare ์์น ๊ฒํ ํ, create pull request
pull request๋ฅผ ๋ฐ์ ์ฌ๋์ pull requests ์ฐฝ์ผ๋ก ๊ฐ์
file changed๋ฅผ ํด๋ฆญํ๋ฉด 3๊ฐ์ง ์ต์ ์ด ์๋ค.
comment
approve
request change
์ถ๊ฐ ํค์๋
rebase: ๋ฌต์ ์ปค๋ฐ์ ์ ์ปค๋ฐ ์ฒ๋ผ ์กฐ์
amend: ๊น๋นกํ๊ณ ์์ ๋ชปํ ํ์ผ์ด ์์ด์, ๋ฐฉ๊ธ ๋ง๋ ์ปค๋ฐ์ ์ด์ง ์ถ๊ฐ
cherry-pick: ์ ์ปค๋ฐ ํ๋๋ง ๋ผ์ ์ง๊ธ ๋ธ๋์น์ ๋ถ์ด๊ณ ์ถ์ ๋
reset: ์๋ ์ปค๋ฐ์ผ๋ก ์๊ฐ ๋๋ฆฌ๊ธฐ
reverse: ์ด ์ปค๋ฐ์ ๋ณ๊ฒฝ์ฌํญ์ ๋๋๋ฆฌ๊ณ ์ถ๋ค.
stash: ๋ณ๊ฒฝ์ฌํญ์ ์ ์ ํต.์์ง ์ปค๋ฐ ์ํจ.
Last updated