[GIT] Git Flow | Github Flow ์ „๋žต

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๋ฅผ ์‹ค์ฒœํ•˜๊ธฐ ์ ํ•ฉํ•œ ๋ธŒ๋žœ์น˜ ์ „๋žต์ธ ๊ฒƒ ๊ฐ™๋‹ค.

์‚ฌ์šฉ๋ฒ•

  1. master ๋ธŒ๋žœ์น˜๋Š” ์–ด๋–ค ๋•Œ๋“  ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค
    • master ๋ธŒ๋žœ์น˜๋Š” ํ•ญ์ƒ ์ตœ์‹  ์ƒํƒœ๋ฉฐ, stable ์ƒํƒœ๋กœ product์— ๋ฐฐํฌ๋˜๋Š” ๋ธŒ๋žœ์น˜
    • ์ด ๋ธŒ๋žœ์น˜์— ๋Œ€ํ•ด์„œ๋Š” ์—„๊ฒฉํ•œ role๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค
    • mergeํ•˜๊ธฐ ์ „์— ์ถฉ๋ถ„ํžˆ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด์•ผํ•œ๋‹ค. ํ…Œ์ŠคํŠธ๋Š” ๋กœ์ปฌ์—์„œ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ธŒ๋žœ์น˜๋ฅผ push ํ•˜๊ณ  Jenkins๋กœ ํ…Œ์ŠคํŠธ ํ•œ๋‹ค
  2. master์—์„œ ์ƒˆ๋กœ์šด์ผ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ ๋‹ค๋ฉด, ์ด๋ฆ„์„ ๋ช…ํ™•ํžˆ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.
    • ๋ธŒ๋žœ์น˜๋Š” ํ•ญ์ƒ master ๋ธŒ๋žœ์น˜์—์„œ ๋งŒ๋“ ๋‹ค
    • Git-flow์™€๋Š” ๋‹ค๋ฅด๊ฒŒ feature ๋ธŒ๋žœ์น˜๋‚˜ develop ๋ธŒ๋žœ์น˜๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Œ
    • ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์€ ์ž์„ธํ•˜๊ฒŒ ์–ด๋–ค ์ผ์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด์„œ ์ž‘์„ฑํ•ด์ฃผ๋„๋ก ํ•˜์ž
    • ์ปค๋ฐ‹๋ฉ”์‹œ์ง€๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ž‘์„ฑํ•˜์ž
  3. ์›๊ฒฉ์ง€ ๋ธŒ๋žœ์น˜๋กœ ์ˆ˜์‹œ๋กœ push ํ•˜์ž
    • ํ•ญ์ƒ ์›๊ฒฉ์ง€์— ์ž์‹ ์ด ํ•˜๊ณ  ์žˆ๋Š” ์ผ๋“ค์„ ์˜ฌ๋ ค ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค
    • ์ด๋Š” ํ•˜๋“œ์›จ์–ด์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด ์ž‘์—…ํ•˜๋˜ ๋ถ€๋ถ„์ด ์—†์–ด์ง€๋”๋ผ๋„, ์›๊ฒฉ์ง€์— ์žˆ๋Š” ์†Œ์Šค๋ฅผ ๋ฐ›์•„์„œ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค
  4. ํ”ผ๋“œ๋ฐฑ์ด๋‚˜ ๋„์›€์ด ํ•„์š”ํ•  ๋•Œ, ๊ทธ๋ฆฌ๊ณ  merge ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์„ ๋•Œ๋Š” pull request๋ฅผ ์ƒ์„ฑํ•œ๋‹ค
    • pull request๋Š” ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ๋„์™€์ฃผ๋Š” ์‹œ์Šคํ…œ
    • ์ด๊ฒƒ์„ ์ด์šฉํ•ด ์ž์‹ ์˜ ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•˜๊ณ , ๋ฆฌ๋ทฐ๋ฐ›์ž
    • merge ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด master ๋ธŒ๋žœ์น˜๋กœ ๋ฐ˜์˜์„ ์š”๊ตฌํ•˜์ž
  5. ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋ฆฌ๋ทฐ์™€ ๋…ผ์˜๊ฐ€ ๋๋‚œ ํ›„ master๋กœ mergeํ•œ๋‹ค
    • ๊ณง์žฅ product๋กœ ๋ฐ˜์˜์ด๋  ๊ธฐ๋Šฅ์ด๋ฏ€๋กœ, ์ดํ•ด๊ด€๊ณ„๊ฐ€ ์—ฐ๊ฒฐ๋œ ์‚ฌ๋žŒ๋“ค๊ณผ ์ถฉ๋ถ„ํ•œ ๋…ผ์˜ ์ดํ›„ ๋ฐ˜์˜ํ•˜๋„๋ก ํ•œ๋‹ค
    • ๋ฌผ๋ก  CI๋„ ํ†ต๊ณผํ•ด์•ผ ํ•จ
  6. master๋กœ merge๋˜๊ณ  push ๋˜์—ˆ์„ ๋•Œ๋Š”, ์ฆ‰์‹œ ๋ฐฐํฌ๋˜์–ด์•ผํ•œ๋‹ค
    • GitHub-flow์˜ ํ•ต์‹ฌ์ด๋‹ค
    • master๋กœ merge๊ฐ€ ์ผ์–ด๋‚˜๋ฉด ์ž๋™์œผ๋กœ ๋ฐฐํฌ๊ฐ€ ๋˜๋„๋ก ์„ค์ •ํ•ด๋†“๋Š”๋‹ค