๐ก ๋ณธ ๋ฌธ์๋ Git branch ์ ๋ต์ ๋ํด ์ ๋ฆฌํด๋์ ๊ธ์ ๋๋ค.
๋จ์ํ branch๋ฅผ ๋ง๋ค๊ณ ๊ด๋ฆฌํ๋ ๋ฒ์ ๋ํด์๋ ๋ค๋ฃจ์ง๋ง, branch๋ฅผ ํตํ ๋ฒ์ ๊ด๋ฆฌ์ ๋์ฑ ์ด์ ์ ๋ง์ถ์์ผ๋ ์ฐธ๊ณ ๋ถํ๋๋ฆฝ๋๋ค.
Git branch
1. Git branch ์์ฑ
# git branch ์์ฑ
git branch develop
# ํด๋น branch๋ก ์ด๋
git checkout develop
# add, commit ํ ํด๋น ๋ธ๋ ์น์ pushํ๊ธฐ
git add .
git commit -m "comment"
git push origin develop
git branch ์์ฑ ๋ฐ ํด๋น branch๋ก ์ด๋์ ํ๋ฒ์!
git checkout -b develop
2. Git branch ์ญ์
# git branch ์ญ์
git branch -d develop
Git Branch ์ ๋ต๋ค
1. gitflow
gitflow์๋ 5๊ฐ์ง ๋ธ๋์น๊ฐ ์กด์ฌํฉ๋๋ค.
- master(main) : ๊ธฐ์ค์ด ๋๋ ๋ธ๋์น๋ก ์ ํ์ ๋ฐฐํฌํ๋ ๋ธ๋์น
- develop : ๊ฐ๋ฐ ๋ธ๋์น๋ก ๊ฐ๋ฐ์๋ค์ด ์ด ๋ธ๋์น๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ์ ์์ ํ ๊ธฐ๋ฅ๋ค์ Merge
- feature : ๋จ์ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ ๋ธ๋์น๋ก ๊ธฐ๋ฅ ๊ฐ๋ฐ์ด ์๋ฃ๋๋ฉด develop ๋ธ๋์น์ Merge
- release : ๋ฐฐํฌ๋ฅผ ์ํด master ๋ธ๋์น๋ก ๋ณด๋ด๊ธฐ ์ ์ ๋จผ์ QA(ํ์ง๊ฒ์ฌ)๋ฅผ ํ๊ธฐ์ํ ๋ธ๋์น
- hotfix : master ๋ธ๋์น๋ก ๋ฐฐํฌ๋ฅผ ํ๋๋ฐ ๋ฒ๊ทธ๊ฐ ์๊ฒผ์ ๋ ๊ธด๊ธ ์์ ํ๋ ๋ธ๋์น
master์ develop๊ฐ ์ค์ํ ๋งค์ธ ๋ธ๋์น์ด๊ณ ๋๋จธ์ง๋ ํ์์ ์ํด์ ์ด์ํ๋ ๋ธ๋์น์ ๋๋ค. branch๋ฅผ mergeํ ๋, ํญ์ -no-ff ์ต์ ์ ๋ถ์ฌ branch์ ๋ํ ๊ธฐ๋ก์ด ์ฌ๋ผ์ง๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
gitflow ๊ณผ์
- master ๋ธ๋์น์์ develop ๋ธ๋์น๋ฅผ ๋ถ๊ธฐํฉ๋๋ค.
- ๊ฐ๋ฐ์๋ค์ develop ๋ธ๋์น์ ์์ ๋กญ๊ฒ ์ปค๋ฐ์ ํฉ๋๋ค.
- ๊ธฐ๋ฅ ๊ตฌํ์ด ์๋ ๊ฒฝ์ฐ develop ๋ธ๋์น์์ feature/* ๋ธ๋์น๋ฅผ ๋ถ๊ธฐํฉ๋๋ค.
- ๋ฐฐํฌ๋ฅผ ์ค๋นํ๊ธฐ ์ํด develop ๋ธ๋์น์์ release/* ๋ธ๋์น๋ฅผ ๋ถ๊ธฐํฉ๋๋ค.
- ํ ์คํธ๋ฅผ ์งํํ๋ฉด์ ๋ฐ์ํ๋ ๋ฒ๊ทธ ์์ ์ release/* ๋ธ๋์น์ ์ง์ ๋ฐ์ํฉ๋๋ค.
- ํ ์คํธ๊ฐ ์๋ฃ๋๋ฉด release ๋ธ๋์น๋ฅผ master์ develop์ mergeํฉ๋๋ค.
2. github flow
Git-flow๊ฐ Github์์ ์ฌ์ฉํ๊ธฐ์๋ ๋ณต์กํ๋ค๊ณ ๋์จ ๋ธ๋์น ์ ๋ต์ ๋๋ค. hotfix ๋ธ๋์น๋ feature ๋ธ๋์น๋ฅผ ๊ตฌ๋ถํ์ง ์์ผ๋ฉฐ, master๋ก mergeํ ๋๋ง๋ค ๋ฐฐํฌ๋ฅผ ์งํํฉ๋๋ค. master๋ก mergeํ ๋, pull request๋ฅผ ์์ฑํด์ผ ํ๋ฉฐ review๋ฅผ ๋ฐ๊ณ merge๋ฅผ ์งํํฉ๋๋ค. CI์ ๋ฐฐํฌ๊ฐ ์๋ํ๋์ด์๋ ํ๋ก์ ํธ์ ์ ์ฉํฉ๋๋ค.
github flow ๊ณผ์
- master ๋ธ๋์น๋ ์ด๋ค ๋๋ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
- master ๋ธ๋์น๋ ํญ์ ์ต์ ์ํ๋ฉฐ, stable ์ํ๋ก product์ ๋ฐฐํฌ๋๋ ๋ธ๋์น
- ์ด ๋ธ๋์น์ ๋ํด์๋ mergeํ๊ธฐ ์ ์ ์ถฉ๋ถํ ํ
์คํธ๋ฅผ ํด์ผํ๋ฉฐ, ์๊ฒฉํ role๊ณผ ํจ๊ป ์ฌ์ฉํฉ๋๋ค.
- ํ ์คํธ๋ ๋ก์ปฌ์์ ํ๋ ๊ฒ์ด ์๋๋ผ ๋ธ๋์น๋ฅผ push ํ๊ณ Jenkins๋ก ํ ์คํธํฉ๋๋ค.
- master์์ ์๋ก์ด์ผ์ ์์ํ๊ธฐ ์ํด ๋ธ๋์น๋ฅผ ๋ง๋ ๋ค๋ฉด, ์ด๋ฆ์ ๋ช
ํํ ์์ฑํฉ๋๋ค.
- ๋ธ๋์น๋ ํญ์ master ๋ธ๋์น์์ ๋ง๋ญ๋๋ค.
- Git-flow์๋ ๋ค๋ฅด๊ฒ feature ๋ธ๋์น๋ develop ๋ธ๋์น๊ฐ ์กด์ฌํ์ง ์์ต๋๋ค.
- ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋, ๋ฒ๊ทธ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ธ๋์น ์ด๋ฆ์ ์ ๊ฒฐ์ ํด์ผํ๋ฉฐ, ์ด๋ค ์ผ์ ํ๊ณ ์๋์ง ์ปค๋ฐ๋ฉ์์ง๋ฅผ ๋ช ํํ๊ฒ ์์ฑํด์ผ ํฉ๋๋ค.
- ์๊ฒฉ์ง ๋ธ๋์น๋ก ์์๋ก push ํฉ๋๋ค.
- Git-flow์ ์๋ฐ๋๋ ๋ฐฉ์.
- ํญ์ ์๊ฒฉ์ง์ ์์ ์ด ํ๊ณ ์๋ ์ผ๋ค์ ์ฌ๋ ค ๋ค๋ฅธ ์ฌ๋๋ค๋ ํ์ธํ ์ ์๋๋ก ํด์ค๋๋ค.
- ์ด๋ ํ๋์จ์ด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํด ์์ ํ๋ ๋ถ๋ถ์ด ์์ด์ง๋๋ผ๋, ์๊ฒฉ์ง์ ์๋ ์์ค๋ฅผ ๋ฐ์์ ์์ ํ ์ ์๋๋ก ํด์ค๋๋ค.
- ํผ๋๋ฐฑ์ด๋ ๋์์ด ํ์ํ ๋, ๊ทธ๋ฆฌ๊ณ merge ์ค๋น๊ฐ ์๋ฃ๋์์ ๋๋ pull request๋ฅผ ์์ฑํฉ๋๋ค.
- pull request๋ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ๋์์ฃผ๋ ์์คํ
- ์ด๊ฒ์ ์ด์ฉํด ์์ ์ ์ฝ๋๋ฅผ ๊ณต์ ํ๊ณ , ๋ฆฌ๋ทฐ๋ฐ์ ๊ฐ์ ํฉ๋๋ค.
- pull request๋ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ๋์์ฃผ๋ ์์คํ
- ๊ธฐ๋ฅ์ ๋ํ ๋ฆฌ๋ทฐ์ ๋
ผ์๊ฐ ๋๋ ํ master๋ก mergeํ๋ค
- ๊ณง์ฅ product๋ก ๋ฐ์์ด๋ ๊ธฐ๋ฅ์ด๋ฏ๋ก, ์ดํด๊ด๊ณ๊ฐ ์ฐ๊ฒฐ๋ ์ฌ๋๋ค๊ณผ ์ถฉ๋ถํ ๋
ผ์ ์ดํ ๋ฐ์ํ๋๋ก ํฉ๋๋ค
- ๋ฌผ๋ก CI๋ ํต๊ณผํด์ผํ๋ค!
- ๊ณง์ฅ product๋ก ๋ฐ์์ด๋ ๊ธฐ๋ฅ์ด๋ฏ๋ก, ์ดํด๊ด๊ณ๊ฐ ์ฐ๊ฒฐ๋ ์ฌ๋๋ค๊ณผ ์ถฉ๋ถํ ๋
ผ์ ์ดํ ๋ฐ์ํ๋๋ก ํฉ๋๋ค
- master๋ก merge๋๊ณ push ๋์์ ๋๋, ์ฆ์ ๋ฐฐํฌ๋์ด์ผ ํฉ๋๋ค
- master๋ก merge๊ฐ ์ผ์ด๋๋ฉด CD๋ฅผ ํตํด ์๋์ผ๋ก ๋ฐฐํฌ๊ฐ ๋๋๋ก ์ค์ ํด๋์ต๋๋ค.
3. Fork์ Pull Request
์คํ์์ค ๊ธฐ์ฌ๋ฅผ ํ๊ฑฐ๋ ๊ท๋ชจ๊ฐ ์๋ ๊ฐ๋ฐ์ ํ ๊ฒฝ์ฐ, ๋ธ๋์น ๋ณด๋ค๋ Fork์ Pull requests๋ฅผ ํ์ฉํ์ฌ ๊ตฌํ์ ํฉ๋๋ค. Fork๋ ๋ธ๋์น์ ๋น์ทํ์ง๋ง ํ๋ก์ ํธ๋ฅผ ํต์งธ๋ก ์ธ๋ถ๋ก ๋ณต์ ํด์ ๊ฐ๋ฐ์ ํ๋ ๋ฐฉ์์ ๋๋ค. ๊ฐ๋ฐ์ ํด์ ๋ธ๋์น์ฒ๋ผ Merge๋ฅผ ๋ฐ๋ก ํ๋ ๊ฒ์ด ์๋๋ผ Pull requests๋ก ๋จธ์ง ์์ฒญ์ ๋ณด๋ด๋ฉด ํ๋ก์ ํธ ๊ด๋ฆฌ์๊ฐ Pull requests๋ ์ฝ๋๋ฅผ ๋ณด๊ณ ์ ์ ํ๋ค ์ถ์ผ๋ฉด ๊ทธ๋ ๊ทธ ๊ธฐ๋ฅ์ ๋ถํ๋ ์์ผ๋ก ๊ฐ๋ฐ์ ์งํํฉ๋๋ค.
์ ํฌ ํ์ด ์ฌ์ฉํ๋ Git Branch ์ ๋ต..?
๋ธ๋์น ์ ๋ต์ ๋ค์ํ๊ธฐ์ ์ ๋ต์ด๋ ์กด์ฌํ์ง ์์ง๋ง, ๋ค์ํ ๋ฐฉ๋ฒ์ ์๋ฉด ํ์ฉํ๊ธฐ ์ข๊ธฐ์ ์ ํฌ ํ์ด ์ฌ์ฉํ๋ ๋ธ๋ ์น ์ ๋ต์ ๊ณต์ ํ์๋ฉด...?
- ํ์ฌ gitflow์ github flow๋ฅผ ํผํฉํ์ฌ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
- ์ ํฌ๋ feature ๋ธ๋ ์น์์ ๊ธฐ๋ฅ์ ๊ฐ๋ฐ ํ develop์ผ๋ก Pull Request๋ฅผ ๋ณด๋ด๊ณ review๋ฅผ ๋ฐ์ ํ merge๋ฅผ ์งํํฉ๋๋ค.
- ์ดํ ๋ฐฐํฌํ ๋ฒ์ ์ ๋ํด์๋ develop์์ main์ผ๋ก mergeํ์ฌ ๋ฐฐํฌํ๊ณ ์์ต๋๋ค.
๋ฌผ๋ก , ํน์ ๋ธ๋ ์น ์ ๋ต์ ์ฌ์ฉํด์ ๊ฐ๋ฐํ์๋ผ๊ณ ์ฒ์๋ถํฐ ์ ํด์ง ๊ฒ์ ์๋์์ง๋ง, ์ด๋ฒ์ ์ฐพ์๋ณด๋ ๋๊ฐ์ง ์ ๋ต์ ํผํฉํ์ฌ ์ฌ์ฉํ๊ณ ์์๋ค์. ์ด๋ ๊ฒ Branch๋ฅผ ๊ด๋ฆฌํ๋ฉด์ ์ค์ํ๋ค๊ณ ๋๋ ๊ฒ์?
- ๋ธ๋ ์น ํ๋์ ๊ธฐ๋ฅ์ ๋ช ํํ ํ์!
- pull request๋ฅผ ์์ฒญํ์ฌ ์ฝ๋๋ฆฌ๋ทฐ๋ฅผ ๋ฐ๊ณ ๊ฐ์ ํ์!
์ ๋ฆฌํ์๋ฉด...? ์ ๊ฐ ๋๋ผ๊ธฐ์ ๋ธ๋ ์น ์ ๋ต์ ๋๋ฌด ๋ค์ํ์ฌ ์ด๋ค ์ ๋ต์ ์ฌ์ฉํด๋ ๋ฌด๋ฐฉํ์ง๋ง, ๋ธ๋ ์น ํ๋์ ๊ธฐ๋ฅ์ ๋ช ํํ ํ๊ณ ์งง์ ์ฃผ๊ธฐ๋ก pull request๋ฅผ ๋ณด๋ด ์ฝ๋๋ฆฌ๋ทฐ๋ฅผ ๋ฐ๋ ์ ๋ต์ ์ ํํ๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ๋ค์.
๊ธด ๊ธ ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์ฐธ๊ณ
- [์ฐ์ํํ์ ๋ค] ์ฐ๋ฆฐ Git-flow๋ฅผ ์ฌ์ฉํ๊ณ ์์ด์: https://techblog.woowahan.com/2553/
- git branching strategies: https://faun.pub/git-branching-strategies-in-2022-83938c5784d8
- [velog] Git branch ์ ๋ต: https://velog.io/@kw2577/Git-branch-%EC%A0%84%EB%9E%B5