โป ์ด ๊ธ์ ์ฝ๋ํ๋ ์ ์ฒดํ๋จ ํ๋์ ํ๋ฉด์ ๋ง๋ค์ด์ก์ต๋๋ค.
โป ์ค๋ฌด์๊ฐ ์๋ ค์ฃผ๋ Git ํ์ฉํ ํ๋ก์ ํธ ๊ด๋ฆฌ ๊ฐ์์
๋๋ค.
โป ์ฝ๋ํ๋ ์ ๋ฐ๋ก๊ฐ๊ธฐ
Git ๋ธ๋์น
๋ธ๋์น๋?
- ๊ธฐ๋ณธ ๋ธ๋์น๋ก๋ถํฐ ํ์ํ ๋
๋ฆฝ์ ์ธ ์์
๊ณต๊ฐ
- ์ต์ ์ปค๋ฐ์ ๊ฐ๋ฆฌํค๋ ์ผ์ข
์ ํฌ์ธํฐ
- ๋งค์ฐ ๊ฐ๋ฒผ์
- ์์ฑ, ์ด๋, ๋ณํฉ(merge)์ด ๋งค์ฐ ์ฌ์
master๋ธ๋์น
- Git์ ๊ธฐ๋ณธ์ ์ผ๋ก master๋ธ๋์น๋ฅผ ์์ฑํ๋ค.
- master๋ธ๋์น๋ ์ฒซ ๋ฒ์งธ ์ปค๋ฐ์ ๋ง๋ค์ด์ผ ์์ฑ๋ ์ปค๋ฐ์ ๊ฐ๋ฆฌํฌ์ ์๋ค.
Head
- ํ์ฌ ๋ธ๋์น๋ฅผ ๊ฐ๋ฆฌํค๋ ์ผ์ข
์ ํฌ์ธํฐ
- ํ์ฌ ๋ธ๋์น์ ๋ง์ง๋ง ์ปค๋ฐ์ ๋ํ ์ค๋
์ท
์๋ก์ด ๊ธฐ๋ฅ ๊ฐ๋ฐ์ด ์์๋๋ฉด?
- ๋ธ๋์น๋ ๋ชฉ์ ์ ๋ฐ๋ผ ๋ถ๊ธฐํ ์ ์๋ค.
- ๋ธ๋์น ๋ถ๊ธฐ ์ ๋ต์ ์กฐ์ง์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.
๋ธ๋์น ์ด๋(checkout)
$ git checkout ์ด๋ํ ๋ธ๋์น๋ช
- Head๋ checkout๋์ ๋ธ๋์น๋ก ์ด๋ํ๋ค.
- ๋ก์ปฌ ์ ์ฅ์์ ์ํ๋ Head๊ฐ ๊ฐ๋ฆฌํค๋ ๋ง์ง๋ง ์ปค๋ฐ์ด ์ต์ ์ด๋๊ณ ,
- ์์
๋๋ ํ ๋ฆฌ์ ํ์ผ ์ํ๋ ๋ณ๊ฒฝ๋๋ค.
๊ฐ๋ฐ์ค ์ด์๊ฐ ๋ฐ์ํ๋ฉด?
- master๋ธ๋์น์์ issue ๋ผ๋ ์๋ก์ด ๋ธ๋์น ์์ฑ
$ git barnch issue
$ git checkout issue
- ์ดํ ์ด์๊ฐ ์๋ ํ์ผ์ ๊ณ ์น๊ณ addํ๊ณ commit ํ๋ค.
์ด์ ํด๊ฒฐ์ด ์๋ฃ๋๋ฉด? - ๋ธ๋์น ๋ณํฉ(merge)
- ๊ธฐ์ค์ด ๋๋ ๋ธ๋์น๋ก ์ด๋ํด์ ๋ณํฉํ๋ค.
- issue๋ธ๋์น์์ master๋ธ๋์น๋ก ์ด๋
- $ git checkout master
- ํฉ์ณ์ง ๋ธ๋์น๋ฅผ ๋ณํฉํ๋ค.
- $ git merge issue
- ๋์ด์ ์ฌ์ฉํ์ง ์๋ ๋ธ๋์น๋ ์ญ์ ํ๊ธฐ
- $ git branch -d issue
๊ธฐ๋ฅ ๊ฐ๋ฐ์ด ์๋ฃ๋๋ฉด?
๋ชจ๋ ๋ธ๋์น ๋ณํฉํ๋ค.
3-way Merge
- ์๋ 3๊ฐ ์ปค๋ฐ์ ๋ชจ๋ ๊ณ ๋ คํ์ฌ ๋ณํฉํ๋ ๋ฐฉ์
- 3-way merge์ ๊ฒฐ๊ณผ๋ ์๋ก์ด ์ปค๋ฐ์ผ๋ก ์์ฑ๋จ
๋ธ๋์น ๋ณํฉ์ ํญ์ ์ฑ๊ณตํ๋๊ฐ?
- ์๋๋ค! ๋จธ์งํด์ผํ๋ ํ์ผ์ ๋ด์ฉ์ด ๋ค๋ฅผ๊ฒฝ์ฐ ๋ณํฉ๋์ง ์๋๋ค
๋ณ๊ฒฝ์ฌํญ์ ์ถฉ๋(conflict)
- ๊ฐ๋ฐํ๋ ๊ธฐ๋ฅ์ ๋ชฉ์ ์ ๋ง๊ฒ ์ด๋ค ๋ณ๊ฒฝ์ฌํญ์ ์ด๋ป๊ฒ ๋ฐ์ํ ์ง ๊ฒฐ์ ํ๊ณ ์์ ํ์ฌ ๋ฐ์ํ๋๊ฒ์ conflict์ ํด๊ฒฐํ๋ ๊ณผ์ ์ด๋ผ ํ๋ค.
์ถฉ๋์ ํด๊ฒฐ
- ์ง์ mergeํ๊ธฐ
- vi๋ก ํ์ผ์ ์ง์ ์์ ํ๋ค.
- mergetool ์ฌ์ฉํ๊ธฐ
- ๊ฐ๋ฐ์์ ์๋๋๋ก ์์ ํ๊ณ
- conflict ๊ธฐํธ ์ ๊ฑฐ
- ์์ ์ด ์๋ฃ๋๋ฉด ์ ์ฅํ ์ข
๋ฃ
- ๋๋จธ์ง 3-way ์ฐฝ์ ์์ ์์ด ์ข
๋ฃ
- ๋ณํฉ์ด ์ ๋๋ก ๋์๋์ง ํ์ธํ, commit ์์ฑ
Git์ Tag
Git์์ ํ๊ทธ๋?
- ํ๊ทธ๋ ํน์ ์์ ์ ์์ค์ฝ๋ฅด ์ ๋ณด๋ฅผ ๊ธฐ๋กํจ
- ํ๋ก์ ํธ ์งํ์ค ์๋ฏธ์๋ ์์ ์ ์ปค๋ฐ์ ํ๊น
ํ๊ฒ
- ์๋ฏธ์๋ ์์ ์ด๋?
- 1์ฐจ ๋ชฉํ ๊ธฐ๋ฅ ๊ฐ๋ฐ์ด ์๋ฃ๋์์๋
- ๋งค์ฐ ์ค์ํ ์ด์๊ฐ ํด๊ฒฐ๋์์๋
- ๊ธฐ๋ฅ ๊ฐ๋ฐ ์๋ฃ๋ฐ ํ
์คํธ๋ฅผ ๋ชจ๋ ํต๊ณผํ์์๋
- ๊ณ ๊ฐ์๊ฒ ์ํํธ์จ์ด๋ฅด ๋ฐฐํฌํ ๋ ๋ฑ๋ฑ..
Git ํ๊ทธ ์ข
๋ฅ๋ฐ ์์ฑํ๊ธฐ
- Lightweigh ํ๊ทธ
- ๋ฒ์ ๋ช
๊ณผ ๊ฐ์ ํ๊ทธ๋ช
๋ง ๋จ๊ธฐ๋ ํ๊ทธ
- $ git tag ํ๊ทธ๋ช
- Annotated ํ๊ทธ
- Git DB์ ํ๊ทธ๋ฅผ ์์ฑ์์ ์ด๋ฆ, ์ด๋ฉ์ผ, ํ๊ทธ์์ฑ๋ ์ ๋ฑ์ ์ ์ฅํ๋ ํ๊ทธ
- $ git tag -a ํ๊ทธ๋ช
-m ํ๊ทธ๋ฉ์ธ์ง
ํน์ ์์ ์ ์ปค๋ฐ ํ๊ทธํ๊ธฐ
- ํ๊น
ํ๊ณ ์ ํ๋ ์ปค๋ฐ์ ID๊ฐ ํ์ธ
- ์ปค๋ฐ ID ๊ฐ์ ์ธ์๋ก ํ๊น
ํ๊ธฐ
- $ git -a ํ๊ทธ๋ช
์ปค๋ฐID -m ํ๊ทธ๋ฉ์ธ์ง
Git ๋ธ๋์น ํ์ฉ - GitFlow ๋ชจ๋ธ
- master branch
- develop branch
- feature branch
- relese branch
- hotfix branch
master branch
- ์ค์ ๊ณ ๊ฐ์๊ฒ ๋ฆด๋ฆฌ์ฆ ๋๋ ๋ธ๋์น(production)
- ๋ชจ๋ ๋ณ๊ฒฝ์ฌํญ์ ๊ฒฐ๊ตญ master๋ก ์ต์ข
๋ฐ์๋์ด์ผ ํจ
develop branch
- ์ค์ ๊ฐ๋ฐ์ ์ค์ฌ์ด ๋๋ ๋ธ๋์น
- ์ฆ, ๋ชจ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๊ณ ๋ฒ๊ทธ๊ฐ ์์ ๋๊ณ , ๊ณ ๊ฐ์๊ฒ ๋ฐฐํฌ๊ฐ๋ฅํ ์์ค์ด ๋๋ฉด develop์ ๋ด์ฉ์ master ์ ์ต์ข
๋ฐ์๋์ด์ผ ํจ
- ๋ค์ ๋ฐฐํฌํ ๊ธฐ๋ฅ ๊ฐ๋ฐํ๋ ๋ธ๋์น
feature branch
- ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ ๋ธ๋์น
- develop๋ธ๋์น๋ก๋ถํฐ ๋ถ๋๋์ด ์ฌ์ฉ๋จ
- ๊ธฐ๋ฅ ๊ฐ๋ฐ์ด ์๋ฃ๋๊ฑฐ๋ ์คํ๋ฆฐํธ ์ฃผ๊ฐ๊ฐ ์ข
๋ฃ๋๋ฉด develop๋ธ๋์น๋ก ๋ด์ฉ mergeํ ๋ธ๋์น ์ญ์ ๋จ
relese branch
- ๋ฐฐํฌ๋ฅผ ์ค๋น(๊ฒ์ฆ,์ด์์์ ๋ฑ) ํ๋ ๋ธ๋์น
- ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํ ์ํ๊ฐ ๋๋ฉด master ๋ธ๋์น๋ก ๋ณํฉ
- relese ๋ธ๋์น์์ ๊ธฐ๋ฅ ์ ๊ฒ์ ๋ฐ๊ฒฌํ ์ด์์ ๋ํ ์์ ์ฌํญ์ ๋ฐ์ค์ develop์ ๋ณํฉํด์ผํจ
- ๋ฐฐํฌ ์ค๋น๊ฐ ์๋ฃ๋๋ฉด, ์ต์ข
master๋ก ๋ณํฉํ๊ณ tag๋ฅผ ๋ช
์ํด์ผ ํจ
hotfix branch
- ๋ฐฐํฌํ ๋ฒ์ ์์ ๊ธด๊ธํ๊ฒ ์์ ์ด ํ์ํ ์ฅ์ ๋ฐ ๋ฒ๊ทธ ๋ฐ์์ ๋์ํ๋ ๋ธ๋์น
- hotfix๋ master๋ก๋ถํฐ ๋ถ๊ธฐ๋๋ฉฐ, ์ด์๊ฐ ์์ ๋๋ฉด ์์ ์ฌํญ์ master, develop๋ธ๋์น์ ์ต์ข
๋ฐ์๋์ด์ผ ํจ