Git Flow ๊ฐ๋
- git flow ์ ๋ต์ด๋ ์ฌ๋ฌ ๊ฐ๋ฐ์๊ฐ ํ๋์ ์ ์ฅ์๋ฅผ ์ฌ์ฉํ๋ ํ๊ฒฝ์์ ์ ์ฅ์๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๊ธฐ ์ํ work-flow๋ค.
- ๋ธ๋์น ์์ฑ์ ๊ท์น์ ๋ง๋ค์ด์ ํ์ ์ ์ ์ฐํ๊ฒ ํ๋ ๋ฐฉ๋ฒ๋ก ์ ๋งํ๋ค.
๋ธ๋์น ์ข ๋ฅ
- master : ๊ธฐ์ค์ด ๋๋ ๋ธ๋์น๋ก ์ ํ์ ๋ฐฐํฌํ๋ ๋ธ๋์น | ์ค์ ์ด์ ํ๊ฒฝ
- develop : ๊ฐ๋ฐ ๋ธ๋์น๋ก ๊ฐ๋ฐ์๋ค์ด ์ด ๋ธ๋์น๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ์ ์์ ํ ๊ธฐ๋ฅ๋ค์ Merge
- feature : ๋จ์ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ ๋ธ๋์น๋ก ๊ธฐ๋ฅ ๊ฐ๋ฐ์ด ์๋ฃ๋๋ฉด develop ๋ธ๋์น์ Merge
- release : ๋ฐฐํฌ๋ฅผ ์ํด master ๋ธ๋์น๋ก ๋ณด๋ด๊ธฐ ์ ์ ๋จผ์ QA(ํ์ง๊ฒ์ฌ)๋ฅผ ํ๊ธฐ์ํ ๋ธ๋์น
- hotfix : master ๋ธ๋์น๋ก ๋ฐฐํฌ๋ฅผ ํ๋๋ฐ ๋ฒ๊ทธ๊ฐ ์๊ฒผ์ ๋ ๊ธด๊ธ ์์ ํ๋ ๋ธ๋์น
git flow ๊ณผ์
- master ๋ธ๋์น์์ develop ๋ธ๋์น๋ฅผ ๋ถ๊ธฐ
- ๊ฐ๋ฐ์๋ค์ develop ๋ธ๋์น์ ์์ ๋กญ๊ฒ ์ปค๋ฐ
- ์ถ๊ฐ๋ก ๊ธฐ๋ฅ ๊ตฌํ์ด ์๋ ๊ฒฝ์ฐ develop ๋ธ๋์น์์ feature-* ๋ธ๋์น๋ฅผ ๋ถ๊ธฐํ๋ค.
- ์๋ฅผ ๋ค์ด ํ์ฌ ํ๋ก์ ํธ์์ ์นดํ ๊ณ ๋ฆฌ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ค๋ฉด feature/cateogry ๋ธ๋์น๋ฅผ dev๋ธ๋์น๋ก๋ถํฐ ๋ง๋ฆ
- ๋ฐฐํฌ๋ฅผ ์ค๋นํ๊ธฐ ์ํด develop ๋ธ๋์น์์ release-* ๋ธ๋์น๋ฅผ ๋ถ๊ธฐ
- relase ๋ธ๋์น์์ ํ ์คํธ๋ฅผ ์งํํ๋ฉด์ ๋ฐ์ํ๋ ๋ฒ๊ทธ ์์ ์ release-* ๋ธ๋์น์ ์ง์ ๋ฐ์ํฉ๋๋ค.
- ํ ์คํธ๊ฐ ์๋ฃ๋๋ฉด release ๋ธ๋์น๋ฅผ master์ develop์ mergeํฉ๋๋ค.
์ฌ๊ธฐ์ ์ฃผ์ํด์ผ ํ ์ ์ master์ ์ถ๊ฐ๋ ์์ ๋ด์ฉ์ด ์๋ค๋ฉด ๋ฐ๋์ dev ๋ธ๋์น์๋ merge ํ์ฌ sync๋ฅผ ๋ง์ถฐ์ค์ผ ํ๋ค.
๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค
- Dev = Master + @ ์ฌ์ผ ํ๋ค.
- ํ์ง๋ง Dev != Master + @ ์ธ ์ํฉ์์ ๋๊ตฐ๊ฐ Dev์์ ์ ๊ท feature ๋ธ๋์น๋ฅผ ๋ด๋ค๋ฉด ์ฝ๋๊ฐ ๋งค์ฐ ๊ผฌ์ด๊ฒ ๋๋ค.
- ํ์ง๋ง hotfix๊ฐ ์์ ๋ master์ ๋ฐ๋ก mergeํ๊ฒ ๋๋ค.
- ์ด๋ dev ๋ธ๋์น์ master๋ฅผ merge ํ ๋ชจ๋ feature ๋ธ๋์น๊ฐ dev ๋ธ๋์น๋ฅผ mergeํด์ผํ๋ค.
github flow
- Git-flow๊ฐ Github์์ ์ฌ์ฉํ๊ธฐ์๋ ๋ณต์กํ๋ค๊ณ ๋์จ ๋ธ๋์น ์ ๋ต์ด๋ค.
- hotfix ๋ธ๋์น๋ feature ๋ธ๋์น๋ฅผ ๊ตฌ๋ถํ์ง ์๋๋ค. ๋ค๋ง ์ฐ์ ์์๊ฐ ๋ค๋ฅผ ๋ฟ
- ์์๋ก ๋ฐฐํฌ๊ฐ ์ผ์ด๋๋ฉฐ, CI์ ๋ฐฐํฌ๊ฐ ์๋ํ๋์ด์๋ ํ๋ก์ ํธ์ ์ ์ฉ
Topic ๋ธ๋์น
์๋ก์ด ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ ๋์๋ Topic ๋ธ๋์น๋ฅผ Main ๋ธ๋์น๋ก๋ถํฐ ์์ฑํ๋ค. Git Flow์ Feature ๋ธ๋์น์ ๋์ผํ ์ญํ ์ ํ๋ค. ๋ํ ๋ณ๋๋ก Hotfix ๋ธ๋์น๋ฅผ ๊ด๋ฆฌํ์ง ์์ผ๋ฉฐ, ๋ฒ๊ทธ ์์ ๋ Topic ๋ธ๋์น์์ ์งํํ๋ค.
Topic ๋ธ๋์น์ ์ปค๋ฐ์ ๊ธฐ๋ฅ์ด ์์ฑ๋์ง ์์๋๋ผ๋ ๊พธ์คํ Push ํ๋ค. ๋ ธํธ๋ถ ๋ถ์ค, ์์ ์ปดํจํฐ์ ๊ณ ์ฅ๋ฑ์ ์ํ์ผ๋ก ์ฝ๋๊ฐ ์ ์ค๋๋ ๊ฒ์ ๋ง์์ค๋ค. ์ด๊ฒ๋ณด๋ค ๋ ์ค์ํ ์ด์ ๋ ๊พธ์คํ Push ํจ์ผ๋ก์จ ๊ตฌ์ฑ์ ๋ชจ๋๊ฐ ๋์์์ด ์ปค๋ฎค๋์ผ์ด์ ํ ์ ์๊ฒ ํด์ค๋ค.
๊ฐ๋ฐ์ด ์๋ฃ๋๋ค๋ฉด PR์ ํตํด ํ ๋ก ์ ํ๊ณ ์ฝ๋๋ฆฌ๋ทฐ๋ฅผ ๋ฐ๋๋ค. ํ ๋ก ๊ณผ ๋ฆฌ๋ทฐ๊ฐ ๋๋ฌ๋ค๋ฉด ๋ค๋ฅธ ์ฌ๋๋ค์ ๋์๋ฅผ ์ป๊ณ Main ๋ธ๋์น์ ์์ ์ topic์ mergeํ๋ค.
Github Flow๋ ํ๋ฃจ์ ๋ณ๊ฒฝ์ฌํญ์ ์์ ๋จ์๋ก ์ ์ํ๊ณ ์์ฃผ ๋ณํฉ/๋ฐฐํฌ ํ ์ ์๋ ๊ตฌ์กฐ๋ก, ์ง์ ํ ์๋ฏธ์ CI/CD๋ฅผ ์ค์ฒํ๊ธฐ ์ ํฉํ ๋ธ๋์น ์ ๋ต์ธ ๊ฒ ๊ฐ๋ค.
์ฌ์ฉ๋ฒ
- master ๋ธ๋์น๋ ์ด๋ค ๋๋ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํ๋ค
- master ๋ธ๋์น๋ ํญ์ ์ต์ ์ํ๋ฉฐ, stable ์ํ๋ก product์ ๋ฐฐํฌ๋๋ ๋ธ๋์น
- ์ด ๋ธ๋์น์ ๋ํด์๋ ์๊ฒฉํ role๊ณผ ํจ๊ป ์ฌ์ฉํ๋ค
- mergeํ๊ธฐ ์ ์ ์ถฉ๋ถํ ํ ์คํธ๋ฅผ ํด์ผํ๋ค. ํ ์คํธ๋ ๋ก์ปฌ์์ ํ๋ ๊ฒ์ด ์๋๋ผ ๋ธ๋์น๋ฅผ push ํ๊ณ Jenkins๋ก ํ ์คํธ ํ๋ค
- master์์ ์๋ก์ด์ผ์ ์์ํ๊ธฐ ์ํด ๋ธ๋์น๋ฅผ ๋ง๋ ๋ค๋ฉด, ์ด๋ฆ์ ๋ช
ํํ ์์ฑํด์ผ ํ๋ค.
- ๋ธ๋์น๋ ํญ์ master ๋ธ๋์น์์ ๋ง๋ ๋ค
- Git-flow์๋ ๋ค๋ฅด๊ฒ feature ๋ธ๋์น๋ develop ๋ธ๋์น๊ฐ ์กด์ฌํ์ง ์์
- ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋, ๋ฒ๊ทธ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ธ๋์น ์ด๋ฆ์ ์์ธํ๊ฒ ์ด๋ค ์ผ์ ํ๊ณ ์๋์ง์ ๋ํด์ ์์ฑํด์ฃผ๋๋ก ํ์
- ์ปค๋ฐ๋ฉ์์ง๋ฅผ ๋ช ํํ๊ฒ ์์ฑํ์
- ์๊ฒฉ์ง ๋ธ๋์น๋ก ์์๋ก push ํ์
- ํญ์ ์๊ฒฉ์ง์ ์์ ์ด ํ๊ณ ์๋ ์ผ๋ค์ ์ฌ๋ ค ๋ค๋ฅธ ์ฌ๋๋ค๋ ํ์ธํ ์ ์๋๋ก ํด์ค๋ค
- ์ด๋ ํ๋์จ์ด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํด ์์ ํ๋ ๋ถ๋ถ์ด ์์ด์ง๋๋ผ๋, ์๊ฒฉ์ง์ ์๋ ์์ค๋ฅผ ๋ฐ์์ ์์ ํ ์ ์๋๋ก ํด์ค๋ค
- ํผ๋๋ฐฑ์ด๋ ๋์์ด ํ์ํ ๋, ๊ทธ๋ฆฌ๊ณ merge ์ค๋น๊ฐ ์๋ฃ๋์์ ๋๋ pull request๋ฅผ ์์ฑํ๋ค
- pull request๋ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ๋์์ฃผ๋ ์์คํ
- ์ด๊ฒ์ ์ด์ฉํด ์์ ์ ์ฝ๋๋ฅผ ๊ณต์ ํ๊ณ , ๋ฆฌ๋ทฐ๋ฐ์
- merge ์ค๋น๊ฐ ์๋ฃ๋์๋ค๋ฉด master ๋ธ๋์น๋ก ๋ฐ์์ ์๊ตฌํ์
- ๊ธฐ๋ฅ์ ๋ํ ๋ฆฌ๋ทฐ์ ๋
ผ์๊ฐ ๋๋ ํ master๋ก mergeํ๋ค
- ๊ณง์ฅ product๋ก ๋ฐ์์ด๋ ๊ธฐ๋ฅ์ด๋ฏ๋ก, ์ดํด๊ด๊ณ๊ฐ ์ฐ๊ฒฐ๋ ์ฌ๋๋ค๊ณผ ์ถฉ๋ถํ ๋ ผ์ ์ดํ ๋ฐ์ํ๋๋ก ํ๋ค
- ๋ฌผ๋ก CI๋ ํต๊ณผํด์ผ ํจ
- master๋ก merge๋๊ณ push ๋์์ ๋๋, ์ฆ์ ๋ฐฐํฌ๋์ด์ผํ๋ค
- GitHub-flow์ ํต์ฌ์ด๋ค
- master๋ก merge๊ฐ ์ผ์ด๋๋ฉด ์๋์ผ๋ก ๋ฐฐํฌ๊ฐ ๋๋๋ก ์ค์ ํด๋๋๋ค