GIT

[GIT] ๐Ÿ“ˆ ๊นƒ ๋ธŒ๋žœ์น˜ ์ „๋žต ์ •๋ฆฌ - Github Flow / Git Flow

์ธํŒŒ_ 2021. 11. 22. 07:00

๋ธŒ๋žœ์น˜-์ „๋žต

GIT ๋ธŒ๋žœ์น˜ ์ „๋žต

๋ธŒ๋žœ์น˜ ์ „๋žต์ด๋ž€ ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•˜๋‚˜์˜ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ ์ €์žฅ์†Œ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•œ work-flow๋‹ค. 

๋ธŒ๋žœ์น˜์˜ ์ƒ์„ฑ, ์‚ญ์ œ, ๋ณ‘ํ•ฉ ๋“ฑ git์˜ ์œ ์—ฐํ•œ ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•ด์„œ, ๊ฐ ๊ฐœ๋ฐœ์ž๋“ค์˜ ํ˜ผ๋ž€์„ ์ตœ๋Œ€ํ•œ ์ค„์ด๋ฉฐ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

์ฆ‰, ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ์— ๊ทœ์น™์„ ๋งŒ๋“ค์–ด์„œ ํ˜‘์—…์„ ์œ ์—ฐํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์„ ๋งํ•œ๋‹ค.

 

๋งŒ์ผ ๋ธŒ๋žœ์น˜ ์ „๋žต์ด ์—†์œผ๋ฉด?

๋ธŒ๋žœ์น˜ ์ „๋žต์ด ์—†์„ ๋•Œ ๋‹จ์ ์€ ๊นƒ์„ ์‚ฌ์šฉํ•œ์ง€ ์–ผ๋งˆ ์•ˆ๋๋˜ ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ๋ชจ๋‘ ๊ฒช์–ด๋ณธ ์ƒํ™ฉ๋“ค์ผ ๊ฒƒ์ด๋‹ค.

  • ์–ด๋–ค ๋ธŒ๋žœ์น˜๊ฐ€ ์ตœ์‹  ๋ธŒ๋žœ์น˜์ง€?
  • ์–ด๋–ค ๋ธŒ๋žœ์น˜๋ฅผ ๋Œ์–ด์™€์„œ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•ด์•ผ ํ•˜์ง€?
  • ์–ด๋””์— Push๋ฅผ ๋ณด๋‚ด์•ผ ํ•˜์ง€?
  • ํ•ซํ”ฝ์Šค๋ฅผ ํ•ด์•ผํ•˜๋Š”๋ฐ ์–ด๋–ค ๋ธŒ๋žœ์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ˆ˜์ •ํ•ด์•ผํ• ๊นŒ?
  • ๋ฐฐํฌ ๋ฒ„์ „์€ ์–ด๋–ค ๊ฑธ ๊ณจ๋ผ์•ผํ•˜์ง€?

๊ทœ๋ชจ๊ฐ€ ์–ด๋А์ •๋„ ์ด์ƒ ๋˜๋Š” ์ €์žฅ์†Œ๋ฅผ ์ƒ๋Œ€๋กœ ์ถฉ๋ถ„ํžˆ ๊ฒช์–ด๋ณธ ์ƒํ™ฉ์ผ ๊ฒƒ์ด๋‹ค.

์ด๋Ÿฐ ์ƒํ™ฉ์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ๋ธŒ๋žœ์น˜ ์ „๋žต์ด๋‹ค.

 

์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” 2๊ฐ€์ง€ ๋ธŒ๋žœ์น˜ ์ „๋žต์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด๊ฒ ๋‹ค.

  1. git-flow ์ „๋žต
  2. github-flow ์ „๋žต

GIT-FLOW ์ „๋žต

๋ธŒ๋žœ์น˜-์ „๋žต

  • ๊ธฐ๋ณธ์ ์ธ ๊ฐ€์ง€์˜ ์ด๋ฆ„์€ ์•„๋ž˜์˜ 5๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„ํ•˜๊ณค ํ•œ๋‹ค.
  • feature > develop > release > hotfix > master
  • ์œ„ ์ˆœ์„œ๋“ค์€ ์™ผ์ชฝ์œผ๋กœ ๊ฐˆ์ˆ˜๋ก ํฌ๊ด„์ ์ธ ๊ฐ€์ง€์ด๋ฉฐ master branch๋ฅผ ๋ณ‘ํ•ฉํ•  ๊ฒฝ์šฐ ๊ทธ ์™ผ์ชฝ์— ์žˆ๋Š” hotfix ๋“ฑ ๋ชจ๋“  ๊ฐ€์ง€๋“ค์— ์žˆ๋Š” ์ปค๋ฐ‹๋“ค๋„ ๋ณ‘ํ•ฉํ•˜๋„๋ก ๊ตฌ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.
  • 5๊ฐ€์ง€ ์ค‘, ํ•ญ์‹œ ์œ ์ง€๋˜๋Š” ๋ฉ”์ธ ๋ธŒ๋žœ์น˜ master, develop 2๊ฐ€์ง€์™€ merge ๋˜๋ฉด ์‚ฌ๋ผ์ง€๋Š” ๋ณด์กฐ ๋ธŒ๋žœ์น˜ feature, release, hotfix 3๊ฐ€์ง€๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

Git-flow ๋ธŒ๋žœ์น˜ ๊ตฌ์กฐ

Git-flow ๋ธŒ๋žœ์น˜ ๊ตฌ์กฐ

  • master : ๋ผ์ด๋ธŒ ์„œ๋ฒ„์— ์ œํ’ˆ์œผ๋กœ ์ถœ์‹œ๋˜๋Š” ๋ธŒ๋žœ์น˜.
  • develop : ๋‹ค์Œ ์ถœ์‹œ ๋ฒ„์ „์„ ๋Œ€๋น„ํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๋Š” ๋ธŒ๋žœ์น˜.
  • feature : ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ๋ธŒ๋žœ์น˜. develop ๋ธŒ๋žœ์น˜์— ๋“ค์–ด๊ฐ„๋‹ค.
  • release : ๋‹ค์Œ ๋ฒ„์ „ ์ถœ์‹œ๋ฅผ ์ค€๋น„ํ•˜๋Š” ๋ธŒ๋žœ์น˜. develop ๋ธŒ๋žœ์น˜๋ฅผ release ๋ธŒ๋žœ์น˜๋กœ ์˜ฎ๊ธด ํ›„ QA, ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  master ๋ธŒ๋žœ์น˜๋กœ ํ•ฉ์นœ๋‹ค.
  • hotfix : master ๋ธŒ๋žœ์น˜์—์„œ ๋ฐœ์ƒํ•œ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ธŒ๋žœ์น˜.

 

๋ฉ”์ธ ๋ธŒ๋žœ์น˜

๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋Š” master ๋ธŒ๋žœ์น˜์™€ develop ๋ธŒ๋žœ์น˜ ๋‘ ์ข…๋ฅ˜๋ฅผ ๋งํ•œ๋‹ค.

๋ธŒ๋žœ์น˜-์ „๋žต

 

master ๋ธŒ๋žœ์น˜๋Š” ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋งŒ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ๋งํ•˜๋ฉฐ,

develop๋ธŒ๋žœ์น˜๋Š” ๋‹ค์Œ์— ๋ฐฐํฌํ•  ๊ฒƒ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ธŒ๋žœ์น˜์ด๋‹ค.

์ฆ‰ develop ๋ธŒ๋žœ์น˜๋Š” ํ†ตํ•ฉ ๋ธŒ๋žœ์น˜์˜ ์—ญํ• ์„ ํ•˜๋ฉฐ, ํ‰์†Œ์—๋Š” ์ด ๋ธŒ๋žœ์น˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•œ๋‹ค.

 

๋ณด์กฐ ๋ธŒ๋žœ์น˜

๋ณด์กฐ ๋ธŒ๋žœ์น˜๋Š” ํ”ผ์ฒ˜ ๋ธŒ๋žœ์น˜(feature branch) ๋˜๋Š” ํ† ํ”ฝ ๋ธŒ๋žœ์น˜(topic branch)๋ฅผ ๋งํ•œ๋‹ค.

๋ธŒ๋žœ์น˜-์ „๋žต

  • ๊ฐ€์ง€๊ฐ€ ๋ป—์–ด๋‚˜์˜ค๋Š” ๊ณณ : develop
  • ๋ป—์–ด๋‚˜๊ฐ”๋˜ ๊ฐ€์ง€๊ฐ€ ๋‹ค์‹œ ํ•ฉ์ณ์ง€๋Š” ๊ณณ : develop
  • ์ด๋ฆ„ ์„ค์ • : master, develop, release-*, hotfix-*๋ฅผ ์ œ์™ธํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ์ž์œ ๋กญ๊ฒŒ ์ด๋ฆ„ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์ง€์ด๋‹ค.

master ๋ธŒ๋žœ์น˜์—์„œ develop ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค์—ˆ๊ณ ,

develop ๋ธŒ๋žœ์น˜์—์„œ ๋‹ค์‹œ feature ๋ธŒ๋žœ์น˜๋ฅผ ๋‚˜๋ˆ  ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๊ทธ๋ฆผ์„ ํ†ตํ•ด ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

 

develop ๋ธŒ๋žœ์น˜์—๋Š” ๊ธฐ์กด์— ์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฐœ๋ฐœ์ฝ”๋“œ๊ฐ€ ๋‹ด๊ฒจ์žˆ์œผ๋ฉฐ, 

๋ณด์กฐ ๋ธŒ๋žœ์น˜๋Š” ์ƒˆ๋กœ ๋ณ€๊ฒฝ๋  ๊ฐœ๋ฐœ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ๊ฐ๊ฐ ๋ณด์กดํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

์ฆ‰, ๋ณด์กฐ ๋ธŒ๋žœ์น˜๋Š” ๊ธฐ๋Šฅ์„ ๋‹ค ์™„์„ฑํ•  ๋•Œ๊นŒ์ง€ ์œ ์ง€ํ•˜๊ณ , ๋‹ค ์™„์„ฑ๋˜๋ฉด develop ๋ธŒ๋žœ์น˜๋กœ merge ํ•˜๊ณ  ๊ฒฐ๊ณผ๊ฐ€ ์ข‹์ง€ ๋ชปํ•˜๋ฉด ๋ฒ„๋ฆฌ๋Š” ๋ฐฉํ–ฅ์„ ์ทจํ•œ๋‹ค.

๋ณด์กฐ ๋ธŒ๋žœ์น˜๋Š” ๋ณดํ†ต ๊ฐœ๋ฐœ์ž ์ €์žฅ์†Œ์—๋งŒ ์žˆ๋Š” ๋ธŒ๋žœ์น˜๊ณ , origin์—๋Š” pushํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

๋ฆด๋ฆฌ์ฆˆ ๋ธŒ๋žœ์น˜(release branch)

๋ฆด๋ฆฌ์ฆˆ ๋ธŒ๋žœ์น˜๋Š” ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์ตœ์ข…์ ์ธ ๋ฒ„๊ทธ ์ˆ˜์ • ๋“ฑ์˜ ๊ฐœ๋ฐœ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ๋งํ•œ๋‹ค.  

๋ธŒ๋žœ์น˜-์ „๋žต

  • ๊ฐ€์ง€๊ฐ€ ๋ป—์–ด๋‚˜์˜ค๋Š” ๊ณณ : develop
  • ๋ป—์–ด๋‚˜๊ฐ”๋˜ ๊ฐ€์ง€๊ฐ€ ๋‹ค์‹œ ํ•ฉ์ณ์ง€๋Š” ๊ณณ : develop, master
  • ์ด๋ฆ„ ์„ค์ • : release-*
  • ์ƒˆ๋กœ์šด ์ œํ’ˆ์„ ๋ฐฐํฌํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์ง€์ด๋‹ค.

develop ๋ธŒ๋žœ์น˜์— ๋ฒ„์ „์— ํฌํ•จ๋˜๋Š” ๊ธฐ๋Šฅ์ด merge ๋˜์—ˆ๋‹ค๋ฉด QA๋ฅผ ์œ„ํ•ด develop ๋ธŒ๋žœ์น˜์—์„œ๋ถ€ํ„ฐ release ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 

๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ๋˜๋ฉด master ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉ์‹œํ‚ค๊ณ , ์ถœ์‹œ๋œ master ๋ธŒ๋žœ์น˜์— ๋ฒ„์ „ ํƒœ๊ทธ(ex, v1.0, v0.2)๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

release ๋ธŒ๋žœ์น˜์—์„œ ๊ธฐ๋Šฅ์„ ์ ๊ฒ€ํ•˜๋ฉฐ ๋ฐœ๊ฒฌํ•œ ๋ฒ„๊ทธ ์ˆ˜์ • ์‚ฌํ•ญ์€ develop ๋ธŒ๋žœ์น˜์—๋„ ์ ์šฉํ•ด์ค˜์•ผ ํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ฐฐํฌ ์™„๋ฃŒ ํ›„ develop ๋ธŒ๋žœ์น˜์— ๋Œ€ํ•ด์„œ๋„ merge ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค. 

 

ํ•ซํ”ฝ์Šค ๋ธŒ๋žœ์น˜(hotfix branch)

ํ•ซํ”ฝ์Šค ๋ธŒ๋žœ์น˜๋Š” ๋ฐฐํฌํ•œ ๋ฒ„์ „์—์„œ ๊ธด๊ธ‰ํ•˜๊ฒŒ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ master ๋ธŒ๋žœ์น˜์—์„œ ๋ถ„๋ฆฌํ•˜๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ๋งํ•œ๋‹ค.  

๋ธŒ๋žœ์น˜-์ „๋žต

  • ๊ฐ€์ง€๊ฐ€ ๋ป—์–ด๋‚˜์˜ค๋Š” ๊ณณ : master
  • ๋ป—์–ด๋‚˜๊ฐ”๋˜ ๊ฐ€์ง€๊ฐ€ ๋‹ค์‹œ ํ•ฉ์ณ์ง€๋Š” ๊ณณ : develop, master
  • ์ด๋ฆ„ ์„ค์ • : hotfix-*
  • ์ œํ’ˆ์—์„œ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๊ฒฝ์šฐ์—๋Š” ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์ด ๊ฐ€์ง€๋กœ ํ•ด๋‹น ์ •๋ณด๋“ค์„ ๋ชจ์•„์ค€๋‹ค. ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ์ˆ˜์ •์ด ์™„๋ฃŒ๋œ ํ›„์—๋Š” develop, master์— ๊ณง์žฅ ๋ฐ˜์˜ํ•ด์ฃผ๋ฉฐ tag๋ฅผ ํ†ตํ•ด ๊ด€๋ จ ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•ด๋‘”๋‹ค.

๋ฒ„๊ทธ๋ฅผ ์žก๋Š” ์‚ฌ๋žŒ์ด ์ผํ•˜๋Š” ๋™์•ˆ์—๋„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ develop ๋ธŒ๋žœ์น˜์—์„œ ํ•˜๋˜ ์ผ์„ ๊ณ„์†ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ๋•Œ ๋งŒ๋“  hotfix ๋ธŒ๋žœ์น˜์—์„œ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ develop ๋ธŒ๋žœ์น˜์—๋„ merge ํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๋ถ€๋ถ„์„ ์ฒ˜๋ฆฌํ•ด์ค˜์•ผ ํ•œ๋‹ค.

release ๊ฐ€์ง€๊ฐ€ ์ƒ์„ฑ๋˜์–ด ๊ด€๋ฆฌ๋˜๊ณ  ์žˆ๋Š” ์ƒํƒœ๋ผ๋ฉด ํ•ด๋‹น ๊ฐ€์ง€์— hotfix์ •๋ณด๋ฅผ ๋ณ‘ํ•ฉ์‹œ์ผœ ๋‹ค์Œ๋ฒˆ ๋ฐฐํฌ ์‹œ ๋ฐ˜์˜์ด ์ •์ƒ์ ์œผ๋กœ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

Hotfix๋Š” ๋ณดํ†ต ๋‹ค๊ธ‰ํ•˜๊ฒŒ ๋ฒ„๊ทธ๋ฅผ ๊ณ ์น˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ๋˜๋Š” ๊ฐ€์ง€์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉด ๋ณดํ†ต ์ œ๊ฑฐํ•˜๋Š” ์ผํšŒ์„ฑ ๊ฐ€์ง€๋‹ค.


Git flow ํ๋ฆ„

  • ์•ž์—์„œ ์ ์—ˆ๋˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ 5๊ฐœ ์ค‘ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฐ€์ง€๋Š” master์™€ develop๊ฐ€ ๋˜๋ฉฐ ์ •์ƒ์ ์ธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‘˜ ๋ชจ๋‘๋ฅผ ์šด์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ๋‚˜๋จธ์ง€ feature, release, hotfix branch๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ง€์šฐ๋”๋ผ๋„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊น”๋”ํ•œ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰์„ ์›ํ•œ๋‹ค๋ฉด ์ง€์›Œ๋’€๋‹ค๊ฐ€ ํ•ด๋‹น ๊ฐ€์ง€๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•  ์ƒํ™ฉ์ด ์™”์„ ๋•Œ ๋งŒ๋“ค์–ด์ค˜๋„ ๊ดœ์ฐฎ๋‹ค.
  • ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์—…์€ develop์—์„œ ์ทจํ•ฉํ•œ๋‹ค ์ƒ๊ฐํ•˜๋ฉด ๋˜๋ฉฐ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์ •๋ง ํ™•์‹คํ•˜๊ฒŒ ๋” ์ด์ƒ ๋ณ€๋™์‚ฌํ•ญ์ด ์—†๋‹ค ์‹ถ์„ ๋•Œ master๋กœ์˜ ๋ณ‘ํ•ฉ์„ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.
  • master๊ฐ€ ์•„๋‹Œ ๊ฐ€์ง€๋“ค์€ master์˜ ๋ณ€๋™์‚ฌํ•ญ์„ ๊พธ์ค€ํžˆ ์ฃผ์‹œํ•ด์•ผ ํ•œ๋‹ค.

 

1. ์‹ ๊ทœ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ

๋ธŒ๋žœ์น˜-์ „๋žต

  1. ๊ฐœ๋ฐœ์ž๋Š” develop ๋ธŒ๋žœ์น˜๋กœ๋ถ€ํ„ฐ ๋ณธ์ธ์ด ์‹ ๊ทœ ๊ฐœ๋ฐœํ•  ๊ธฐ๋Šฅ์„ ์œ„ํ•œ feature ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 
  2. feature ๋ธŒ๋žœ์น˜์—์„œ ๊ธฐ๋Šฅ์„ ์™„์„ฑํ•˜๋ฉด develop ๋ธŒ๋žœ์น˜์— merge๋ฅผ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

 

2. ๋ผ์ด๋ธŒ ์„œ๋ฒ„๋กœ ๋ฐฐํฌ

๋ธŒ๋žœ์น˜-์ „๋žต

  1. feature ๋ธŒ๋žœ์น˜๋“ค์ด ๋ชจ๋‘ develop ๋ธŒ๋žœ์น˜์— merge ๋˜์—ˆ๋‹ค๋ฉด QA๋ฅผ ์œ„ํ•ด release ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 
  2. release ๋ธŒ๋žœ์น˜๋ฅผ ํ†ตํ•ด ์˜ค๋ฅ˜๊ฐ€ ํ™•์ธ๋œ๋‹ค๋ฉด release ๋ธŒ๋žœ์น˜ ๋‚ด์—์„œ ์ˆ˜์ •์„ ์ง„ํ–‰ํ•œ๋‹ค.
  3. QA์™€ ํ…Œ์ŠคํŠธ๋ฅผ ๋ชจ๋‘ ํ†ต๊ณผํ–ˆ๋‹ค๋ฉด, ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด release ๋ธŒ๋žœ์น˜๋ฅผ master ๋ธŒ๋žœ์น˜ ์ชฝ์œผ๋กœ mergeํ•˜๋ฉฐ,
  4. ๋งŒ์ผ release ๋ธŒ๋žœ์น˜ ๋‚ด๋ถ€์—์„œ ์˜ค๋ฅ˜ ์ˆ˜์ •์ด ์ง„ํ–‰๋˜์—ˆ์„ ๊ฒฝ์šฐ ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•ด develop ๋ธŒ๋žœ์น˜ ์ชฝ์—๋„ merge๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

 

3. ๋ฐฐํฌ ํ›„ ๊ด€๋ฆฌ

๋ธŒ๋žœ์น˜-์ „๋žต

  1. ๋งŒ์ผ ๋ฐฐํฌ๋œ ๋ผ์ด๋ธŒ ์„œ๋ฒ„(master)์—์„œ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒ๋œ๋‹ค๋ฉด, hotfix ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฒ„๊ทธ ํ”ฝ์Šค๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.
  2. ๊ทธ๋ฆฌ๊ณ  ์ข…๋ฃŒ๋œ ๋ฒ„๊ทธ ํ”ฝ์Šค๋ฅผ master์™€ develop ์–‘ ์ชฝ์— mergeํ•˜์—ฌ ๋™๊ธฐํ™” ์‹œํ‚จ๋‹ค.

GITHUB-FLOW ์ „๋žต

GITHUB-FLOW ์ „๋žต

  • Git flow๊ฐ€ ์ข‹์€ ๋ฐฉ์‹์ด์ง€๋งŒ GitHub์— ์ ์šฉํ•˜๊ธฐ์—๋Š” ๋ณต์žกํ•˜๋‹ค๋Š” Scott Chacon์˜ ํŒ๋‹จ์— ๋”ฐ๋ผ ๋งŒ๋“ค์–ด์ง„ ์ƒˆ๋กœ์šด ๊นƒ ๊ด€๋ฆฌ ๋ฐฉ์‹์ด๋‹ค.
  • ์ž๋™ํ™” ๊ฐœ๋…์ด ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค๋ผ๋Š” ํฐ ํŠน์ง•์ด ์กด์žฌํ•˜๋ฉฐ ๋งŒ์ผ ์ž๋™ํ™”๊ฐ€ ์ ์šฉ๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ณณ์—์„œ๋งŒ ์ˆ˜๋™์œผ๋กœ ์ง„ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.
  • Git flow์— ๋น„ํ•ด ํ๋ฆ„์ด ๋‹จ์ˆœํ•ด์ง์— ๋”ฐ๋ผ ๊ทธ ๊ทœ์น™๋„ ๋‹จ์ˆœํ•ด์กŒ๋‹ค.
  • ๊ธฐ๋ณธ์ ์œผ๋กœ master branch์— ๋Œ€ํ•œ ๊ทœ์น™๋งŒ ์ •ํ™•ํ•˜๊ฒŒ ์ •๋ฆฝ๋˜์–ด ์žˆ๋‹ค๋ฉด ๋‚˜๋จธ์ง€ ๊ฐ€์ง€๋“ค์— ๋Œ€ํ•ด์„œ๋Š” ํŠน๋ณ„ํ•œ ๊ด€์—ฌ๋ฅผ ํ•˜์ง€ ์•Š์œผ๋ฉฐ pull request๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ถŒ์žฅํ•œ๋‹ค.

GitHub-Flow ํŠน์ง•

  • release branch๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„๋˜์ง€ ์•Š์€ ์‹œ์Šคํ…œ์—์„œ์˜ ์‚ฌ์šฉ์ด ์œ ์šฉํ•˜๋‹ค.
  • GitHub ์ž์ฒด์˜ ์„œ๋น„์Šค ํŠน์„ฑ์ƒ ๋ฐฐํฌ์˜ ๊ฐœ๋…์ด ์—†๋Š” ์‹œ์Šคํ…œ์œผ๋กœ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด flow๊ฐ€ ์œ ์šฉํ•˜๋‹ค.
  • ์›น ์„œ๋น„์Šค๋“ค์— ๋ฐฐํฌ์˜ ๊ฐœ๋…์ด ์—†์–ด์ง€๊ณ  ์žˆ๋Š” ์ถ”์„ธ์ด๊ธฐ ๋•Œ๋ฌธ์— ์•ž์œผ๋กœ๋„ Git flow์— ๋น„ํ•ด ์‚ฌ์šฉํ•˜๊ธฐ์— ๋” ์ˆ˜์›”ํ•  ๊ฒƒ์ด๋‹ค.
  • hotfix์™€ ๊ฐ€์žฅ ์ž‘์€ ๊ธฐ๋Šฅ์„ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    ๋ชจ๋“  ๊ตฌ๋ถ„์‚ฌํ•ญ๋“ค๋„ ๊ฒฐ๊ตญ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ „๋ถ€ ์ˆ˜์ •ํ•˜๋Š” ์ผ๋“ค ์ค‘ ํ•˜๋‚˜์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    ์ด ๋Œ€์‹  ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์€ ์šฐ์„  ์ˆœ์œ„๊ฐ€ ์–ด๋–ค ๊ฒƒ์ด ๋” ๋†’์€์ง€์— ๋Œ€ํ•œ ๊ฒƒ์ด๋‹ค.

Github-Flow ํ๋ฆ„

 

1. ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ

๋ธŒ๋žœ์น˜-์ „๋žต

Github-flow ์ „๋žต์€ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ, ๋ฒ„๊ทธ ํ”ฝ์Šค ๋“ฑ ์–ด๋–ค ์ด์œ ๋กœ๋“  ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘๋œ๋‹ค.

๋‹จ, ์ด๋•Œ ์ฒด๊ณ„์ ์ธ ๋ถ„๋ฅ˜ ์—†์ด ๋ธŒ๋žœ์น˜ ํ•˜๋‚˜์— ์˜์กดํ•˜๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์„ ํ†ตํ•ด ์˜๋„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๋“œ๋Ÿฌ๋‚ด๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค.

  • master ๋ธŒ๋žœ์น˜๋Š” ํ•ญ์ƒ ์ตœ์‹  ์ƒํƒœ๋ฉฐ, stable ์ƒํƒœ๋กœ product์— ๋ฐฐํฌ๋˜๋Š” ๋ธŒ๋žœ์น˜๋‹ค. ์ด ๋ธŒ๋žœ์น˜์— ๋Œ€ํ•ด์„œ๋Š” ์—„๊ฒฉํ•œ role๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค
  • ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜๋Š” ํ•ญ์ƒ master ๋ธŒ๋žœ์น˜์—์„œ ๋งŒ๋“ ๋‹ค
  • Git-flow์™€๋Š” ๋‹ค๋ฅด๊ฒŒ feature ๋ธŒ๋žœ์น˜๋‚˜ develop ๋ธŒ๋žœ์น˜๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๊ทธ๋ ‡์ง€๋งŒ, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์€ ์ž์„ธํ•˜๊ฒŒ ์–ด๋–ค ์ผ์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด์„œ ์ž‘์„ฑํ•ด์ฃผ๋„๋ก ํ•˜์ž

 

2. ๊ฐœ๋ฐœ & ์ปค๋ฐ‹ & ํ‘ธ์‰ฌ

๋ธŒ๋žœ์น˜-์ „๋žต

๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ปค๋ฐ‹์„ ๋‚จ๊ธด๋‹ค.
์ด๋•Œ๋„ ๋ธŒ๋žœ์น˜์™€ ๊ฐ™์ด ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€์— ์˜์กดํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€๋ฅผ ์ตœ๋Œ€ํ•œ ์ƒ์„ธํ•˜๊ฒŒ ์ ์–ด์ฃผ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

  • ์ปค๋ฐ‹๋ฉ”์‹œ์ง€๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ž‘์„ฑํ•˜์ž
  • ์›๊ฒฉ์ง€ ๋ธŒ๋žœ์น˜๋กœ ์ˆ˜์‹œ๋กœ push ํ•˜์ž
  • Git-flow์™€ ์ƒ๋ฐ˜๋˜๋Š” ๋ฐฉ์‹
  • ํ•ญ์ƒ ์›๊ฒฉ์ง€์— ์ž์‹ ์ด ํ•˜๊ณ  ์žˆ๋Š” ์ผ๋“ค์„ ์˜ฌ๋ ค ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค
  • ์ด๋Š” ํ•˜๋“œ์›จ์–ด์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด ์ž‘์—…ํ•˜๋˜ ๋ถ€๋ถ„์ด ์—†์–ด์ง€๋”๋ผ๋„, ์›๊ฒฉ์ง€์— ์žˆ๋Š” ์†Œ์Šค๋ฅผ ๋ฐ›์•„์„œ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค

 

3. PR(Pull Request) ์ƒ์„ฑ

๋ธŒ๋žœ์น˜-์ „๋žต

ํ”ผ๋“œ๋ฐฑ์ด๋‚˜ ๋„์›€์ด ํ•„์š”ํ•  ๋•Œ, ๊ทธ๋ฆฌ๊ณ  merge ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์„ ๋•Œ๋Š” pull request๋ฅผ ์ƒ์„ฑํ•œ๋‹ค

  • pull request๋Š” ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ๋„์™€์ฃผ๋Š” ์‹œ์Šคํ…œ
  • ์ด๊ฒƒ์„ ์ด์šฉํ•ด ์ž์‹ ์˜ ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•˜๊ณ , ๋ฆฌ๋ทฐ๋ฐ›๋Š”๋‹ค.
  • merge ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด master ๋ธŒ๋žœ์น˜๋กœ ๋ฐ˜์˜์„ ์š”๊ตฌํ•œ๋‹ค.

 

4. ๋ฆฌ๋ทฐ & ํ† ์˜

๋ธŒ๋žœ์น˜-์ „๋žต

Pull-Request๊ฐ€ master ๋ธŒ๋žœ์น˜ ์ชฝ์— ํ•ฉ์ณ์ง„๋‹ค๋ฉด ๊ณง์žฅ ๋ผ์ด๋ธŒ ์„œ๋ฒ„์— ๋ฐฐํฌ๋˜๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฆ„ ์—†์œผ๋ฏ€๋กœ, ์ƒ์„ธํ•œ ๋ฆฌ๋ทฐ์™€ ํ† ์˜๊ฐ€ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•œ๋‹ค.

 

5. ํ…Œ์ŠคํŠธ

๋ธŒ๋žœ์น˜-์ „๋žต

๋ฆฌ๋ทฐ์™€ ํ† ์˜๊ฐ€ ๋๋‚ฌ๋‹ค๋ฉด ํ•ด๋‹น ๋‚ด์šฉ์„ ๋ผ์ด๋ธŒ ์„œ๋ฒ„(ํ˜น์€ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ)์— ๋ฐฐํฌํ•ด๋ณธ๋‹ค.

๋ฐฐํฌ์‹œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ๊ณง์žฅ master ๋ธŒ๋žœ์น˜์˜ ๋‚ด์šฉ์„ ๋‹ค์‹œ ๋ฐฐํฌํ•˜์—ฌ ์ดˆ๊ธฐํ™” ์‹œํ‚จ๋‹ค.

 

6. ์ตœ์ข… Merge

๋ธŒ๋žœ์น˜-์ „๋žต

๋ผ์ด๋ธŒ ์„œ๋ฒ„(ํ˜น์€ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ)์— ๋ฐฐํฌํ–ˆ์Œ์—๋„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๊ทธ๋Œ€๋กœ master ๋ธŒ๋žœ์น˜์— ํ‘ธ์‹œ๋ฅผ ํ•˜๊ณ , ์ฆ‰์‹œ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ Github-flow ์—์„  master ๋ธŒ๋žœ์น˜๋ฅผ ์ตœ์‹  ๋ธŒ๋žœ์น˜๋ผ๊ณ  ๊ฐ€์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐํฌ ์ž๋™ํ™” ๋„๊ตฌ๋ฅผ ์ด์šฉํ•ด์„œ Merge ์ฆ‰์‹œ ๋ฐฐํฌ๋ฅผ ์‹œํ‚จ๋‹ค.

master๋กœ merge๋˜๊ณ  push ๋˜์—ˆ์„ ๋•Œ๋Š”, ์ฆ‰์‹œ ๋ฐฐํฌ๋˜์–ด์•ผํ•œ๋‹ค

  • GitHub-flow์˜ ํ•ต์‹ฌ
  • master๋กœ merge๊ฐ€ ์ผ์–ด๋‚˜๋ฉด ์ž๋™์œผ๋กœ ๋ฐฐํฌ๊ฐ€ ๋˜๋„๋ก ์„ค์ •ํ•ด๋†“๋Š”๋‹ค. (CI / CD)

github flow vs git flow

github flowgit flow

  • 1๊ฐœ์›” ์ด์ƒ์˜ ๊ธด ํ˜ธํก์œผ๋กœ ๊ฐœ๋ฐœํ•˜์—ฌ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ฐฐํฌ, QA ๋ฐ ํ…Œ์ŠคํŠธ, hotfix ๋“ฑ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋ ฅ์ด ์žˆ๋Š” ํŒ€์ด๋ผ๋ฉด git-flow๊ฐ€ ์ ํ•ฉํ•˜๋‹ค
  • ์ˆ˜์‹œ๋กœ ๋ฆด๋ฆฌ์ฆˆ ๋˜์–ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ์„œ๋น„์Šค๋ฅผ ์ง€์†์ ์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๋ฐฐํฌํ•˜๋Š” ํŒ€์ด๋ผ๋ฉด github-flow ์™€ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ work-flow๊ฐ€ ์ ํ•ฉํ•˜๋‹ค

# ์ฐธ๊ณ ์ž๋ฃŒ

https://hyeon9mak.github.io/git-branch-strategy/

https://gmlwjd9405.github.io/2018/05/11/types-of-git-branch.html

https://code.tutsplus.com/courses/continuous-integration-workflow/lessons/development-approaches-git-flow-and-github-flow

https://github.com/SvanBoxel/release-based-workflow/issues/1