Branch Strategy

๋ธŒ๋žœ์น˜ ์ข…๋ฅ˜

  1. main

  2. develop

  3. feature/xxx

  4. release/xxx

  5. hotfix/xxx

์ „์ฒด์ ์ธ ๋ธŒ๋žœ์น˜ ์ „๋žต ํ๋ฆ„

  1. ์–ด๋– ํ•œ ์ œํ’ˆ์˜ ์š”๊ตฌ(Theme) ๋ฐœ์ƒ ์‹œ ํ•˜๋‚˜์˜ repository๊ฐ€ ์ƒ์„ฑ๋˜๋ฉฐ ๊ทธ์™€ ๋™์‹œ์— main branch๊ฐ€ ์ƒ์„ฑ

  2. main branch๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ๋ฐ”๋กœ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ develop branch๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ default branch๋กœ ์„ค์ •

  3. Feature branches๋Š” develop branch๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋˜๋ฉฐ ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ(Story)์„ ์ž‘์„ฑํ•  ๋•Œ ๋งˆ๋‹ค ๋ฐœ์ƒ

  4. ํ•˜๋‚˜์˜ feature branch๊ฐ€ ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋˜๋ฉด develop branch(Epic)์— ๋ณ‘ํ•ฉ

  5. Story๊ฐ€ ๋ชจ์—ฌ ํ•œ Epic์„ ์ด๋ฃจ๊ฒŒ๋˜๋ฉด release branch๊ฐ€ ์ƒ์„ฑ

  6. Release branch๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด main branch์™€ develop branch ๋ชจ๋‘์— ๋ณ‘ํ•ฉ

  7. ๋งŒ์•ฝ main branch์—์„œ ๋ฌธ์ œ๊ฐ€ ๊ฐ์ง€๋˜๋ฉด hotfix branch๋Š” main branch๋กœ ๋ถ€ํ„ฐ ์ƒ์„ฑ

  8. Hotfix branch๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด main branch์™€ develop branch ๋ชจ๋‘์— ๋ณ‘ํ•ฉ

๋ธŒ๋žœ์น˜๋ณ„ ๊ทœ์น™

main

  • main ๋ธŒ๋žœ์น˜๋Š” ๊ณต์‹ ๋ฆด๋ฆฌ์ฆˆ ๊ธฐ๋ก์„ ์ €์žฅ

  • release ๋ธŒ๋žœ์น˜๋กœ๋ถ€ํ„ฐ์˜ PR ์ˆ˜๋ฝ์€ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์˜ ๋‹ด๋‹น์ž๊ฐ€ ์ˆ˜ํ–‰

  • ์š”์ฒญ์˜จ release ๋ธŒ๋žœ์น˜์˜ ๋ฌธ์ œ๊ฐ€ ์—†์Œ์„ ํ™•์‹คํžˆ ํ™•์ธํ–ˆ์Œ์„ ์˜๋ฏธ

develop

  • develop์€ ๋ถ„๊ธฐ ๊ธฐ๋Šฅ(branch) ๊ฐœ๋ฐœ์˜ ํ†ตํ•ฉ ์ง€์  ์—ญํ• 

  • develop์œผ๋กœ์˜ merge๋Š” ํ†ตํ•ฉ๋˜๋Š” branch์˜ ๋ฆฌ๋ทฐ ๋ฐ ํ…Œ์ŠคํŠธ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Œ์„ ์˜๋ฏธ

feature/xxx

  • xxx์˜ ์˜๋ฏธ๋Š” ์ž‘์„ฑ๋˜๋Š” ๊ธฐ๋Šฅ์„ ์˜๋ฏธ e.g. ์ธ์ฆ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์‹œ : feature/auth

  • ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์€ ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ฐœ๋ฐœ๋˜์–ด์•ผ ํ•˜๋ฉฐ, ๊ทธ ์ด๋ฆ„(naming)์€ ํ•ด๋‹น ๋ธŒ๋žœ์น˜๊ฐ€ ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€ ๋ช…ํ™•ํžˆ ํ•ด์•ผํ•จ

  • ํ•ด๋‹น branch์˜ MR์€ sprint ํ‡ด๊ณ  ์ „ ๋งˆ์Šคํ„ฐ์—๊ฒŒ ๋‹ด๋‹น์ž๊ฐ€ ์š”์ฒญํ•˜๋ฉฐ, ๋งˆ์Šคํ„ฐ๊ฐ€ ํ•ด๋‹น ๊ธฐ๋Šฅ์˜ ๋ฌธ์ œ ์—†์Œ์„ ๋™์˜ ๋ฐ ์ˆ˜๋ฝ์˜ ์˜๋ฏธ๋กœ ์Šน์ธ

  • ํ•ด๋‹น ๋ธŒ๋žœ์น˜ ์ˆ˜์ • ๋ฐ ์ถ”๊ฐ€์‹œ ๋งˆ์ด๋„ˆ๋ฒ„์ „์ด ์—…๊ทธ๋ ˆ์ด๋“œ

  • ์•„์ฃผ ๊ฐ€๋”์˜ ๊ฒฝ์šฐ(์ค‘์š”๋„์— ๋”ฐ๋ผ), ๋ฏธ๋“ค๋ฒ„์ „์ด ์—…๊ทธ๋ ˆ์ด๋“œ

release/xxx

  • xxx์˜ ์˜๋ฏธ๋Š” ์ถœ์‹œ ๋ฒ„์ „์˜ ๊ทœ์น™์— ๋”ฐ๋ฅธ ์ˆซ์ž์˜ ๋‚˜์—ด e.g. 1.2.3

  • develop ๋ธŒ๋žœ์น˜๊ฐ€ ์ถœ์‹œ๋ฅผ ์œ„ํ•œ ์ถฉ๋ถ„ํ•œ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋˜์—ˆ๊ฑฐ๋‚˜ ์ถœ์‹œ ์ผ์ •์ด ๋‹ค๊ฐ€์˜ค๊ณ  ์žˆ๋‹ค๋ฉด ์ƒ์„ฑ

  • ๋งŒ๋“ค์–ด์ง„ release ๋ธŒ๋žœ์น˜์—์„œ ์ถœ์‹œ๋ฅผ ์œ„ํ•œ ์ค€๋น„ ์™„๋ฃŒ์‹œ main์œผ๋กœ์˜ PR์ƒ์„ฑ

  • ์ˆซ์ž๋Š” ๋ฒ„์ „๋ช…์ด๋ฉฐ, ์•„๋ž˜๊ณผ ๊ฐ™์€ ๊ทœ์น™์œผ๋กœ โ€˜.โ€™ ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋‚˜์—ด

    • Major version : Theme์˜ update

    • Middle version : Epic๋‹จ์œ„์˜ update or Epic์œผ๋กœ ๋‹ค๋ฃฐ์ˆ˜๋„ ์žˆ์„ ํฐ ์ˆ˜์ค€์˜ Story update

    • Miner version : Story๋‹จ์œ„์˜ update ๋ฐ ํŒจ์น˜

hotfix/xxx

  • xxx์˜ ์˜๋ฏธ๋Š” ์ƒ์„ฑ๋œ ์ด์Šˆ์˜ ์˜๋ฏธ

  • hotfix ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ์˜ ์˜๋ฏธ๋Š” ์ถœ์‹œํ•œ ์ œํ’ˆ์˜ ์ค‘๋Œ€ํ•œ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Œ์„ ์˜๋ฏธ

  • ๋ฆด๋ฆฌ์ฆˆ๋ฅผ ๋น ๋ฅด๊ฒŒ ํŒจ์น˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ

๋ธŒ๋žœ์น˜๋ณ„ ๋ช…๋ น์–ด

Develop Branch

git branch develop
git push -u origin develop
  • ์ดˆ๊ธฐ ์ƒ์„ฑ์‹œ, main ๋ธŒ๋žœ์น˜์—์„œ develop ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์„œ๋ฒ„๋กœ ํ‘ธ์‹œ

  • Epic๋‹จ์œ„๋กœ main์— merge

Feature Branches

git checkout develop
git checkout -b feature/branch
  • ๊ฐ๊ฐ์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ(Story)์€ ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ฐœ๋ฐœํ•ด์•ผ ํ•จ

  • ์ฆ‰, ์–ด๋–ค ๋‹จ์œ„์˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ๋•Œ develop ๋ธŒ๋žœ์น˜์—์„œ ํ•ด๋‹น๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ฐœ๋ฐœ

  • ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ์‹œ, ๋„ค์ด๋ฐ์€ ํ•ด๋‹น ๋ธŒ๋žœ์น˜๊ฐ€ ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€ ๋ช…ํ™•ํžˆ ํ•ด์•ผํ•จ

git checkout develop
git merge feature/branch
git branch -d feature/branch
  • ์ผ๋ฐ˜์ ์œผ๋กœ feature ๋ธŒ๋žœ์น˜๋Š” ๊ฐ€์žฅ ์ตœ์‹  develop ๋ธŒ๋žœ์น˜์—์„œ ์ƒ์„ฑ

  • Task๋‹จ์œ„๋กœ commit์„ ์ง„ํ–‰

  • Story ์™„์„ฑ์‹œ ๋ฐฑ์—… / ํ˜‘์—… / ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ์œ„ํ•ด ์„œ๋ฒ„(remote)๋กœ ํ‘ธ์‹œ

  • ์ฝ”๋“œ๋ฆฌ๋ทฐ ์š”์ฒญ์‹œ, ๋ฆฌ๋ทฐ ์ˆ˜ํ–‰์ž๋Š” ํ•ด๋‹น ๋ธŒ๋žœ์น˜๋ฅผ ๊ฐ€์ ธ์™€์„œ ํ™•์ธํ•˜๊ณ  ๋ฆฌ๋ทฐ

  • ํ•œ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋˜๋ฉด, ๋‹ค์‹œ develop ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉํ•˜๊ณ , feature ๋ธŒ๋žœ์น˜๋Š” ์‚ญ์ œ

  • feature ๋ธŒ๋žœ์น˜๋Š” ์ ˆ๋Œ€๋กœ main ๋ธŒ๋žœ์น˜์™€ ์ง์ ‘์ ์œผ๋กœ ์ƒํ˜ธ์ž‘์šฉํ•˜์ง€ ์•Š์Œ

Release Branches

git checkout develop
git checkout -b release/0.1.0
  • release ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์ถœ์‹œ ์‹œ์ ์— ๋งž์ถฐ develop ๋ธŒ๋žœ์น˜๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ

  • develop ๋ธŒ๋žœ์น˜๊ฐ€ ์ถœ์‹œ๋ฅผ ์œ„ํ•œ ์ถฉ๋ถ„ํ•œ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด

  • ๋˜๋Š” ์ถœ์‹œ ์ผ์ •์ด ๋‹ค๊ฐ€์˜ค๊ณ  ์žˆ๋‹ค๋ฉด ๋งŒ๋“ค์–ด์ง„ release ๋ธŒ๋žœ์น˜์—์„œ ์ถœ์‹œ๋ฅผ ์œ„ํ•œ ์ค€๋น„๋ฅผ ์‹œ์ž‘

  • release ๋ธŒ๋žœ์น˜์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์€ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†์Œ

  • ๋‹จ์ง€ ๋ฒ„๊ทธ ์ˆ˜์ •, ์„ค๋ช…์„œ ์ƒ์„ฑ ๋ฐ ๊ธฐํƒ€ ์ถœ์‹œ ์ค€๋น„ ์ž‘์—…๋งŒ ์ˆ˜ํ–‰

git checkout main
git merge release/0.1.0
git checkout develop
git merge release/0.1.0
git branch -d release/0/1/0
  • ์ถœ์‹œ ์ „์šฉ ๋ธŒ๋žœ์น˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถœ์‹œ ์ค€๋น„๋ฅผ ํ•˜๋Š” ํ•œํŽธ, ๋‹ค๋ฅธ ํŒ€์€ ๋‹ค์Œ ์ถœ์‹œ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ ๊ฐ€๋Šฅ

  • ์ถœ์‹œ ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด, release ๋ธŒ๋žœ์น˜๋ฅผ main ๋ธŒ๋žœ์น˜์™€ develop ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉํ•˜๊ณ  release ๋ธŒ๋žœ์น˜๋Š” ์‚ญ์ œ

  • release ๋ธŒ๋žœ์น˜๋ฅผ main ๋ธŒ๋žœ์น˜์— ๋ณ‘ํ•ฉํ•˜๊ณ  ๋ฒ„์ „ ์ •๋ณด๋ฅผ ํƒœ๊ทธ

Hotfix Branches

git checkout main
git checkout -b hotfix/branch
  • hotfix ๋ธŒ๋žœ์น˜๋Š” ๋ฆด๋ฆฌ์ฆˆ๋ฅผ ๋น ๋ฅด๊ฒŒ ํŒจ์น˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ

  • hotfix ๋ธŒ๋žœ์น˜๋Š” main ๋ธŒ๋žœ์น˜์—์„œ ์ƒ์„ฑ

git checkout main
git merge hotfix/branch
git checkout develop
git merge hotfix/branch
git branch -D hotfix/branch
  • ์ˆ˜์ • ์‚ฌํ•ญ์ด ์™„๋ฃŒ๋˜๋ฉด, main ๋ธŒ๋žœ์น˜์™€ develop ๋ธŒ๋žœ์น˜ (๋˜๋Š” ํ˜„์žฌ์˜ release ๋ธŒ๋žœ์น˜)์— ๋ณ‘ํ•ฉํ•˜๊ณ  main ๋ธŒ๋žœ์น˜์— ์—…๋ฐ์ดํŠธ๋œ ๋ฒ„์ „์„ ํƒœ๊ทธ

  • ์ˆ˜์ • ์‚ฌํ•ญ์ด ์™„๋ฃŒ๋˜๋ฉด, release ๋ธŒ๋žœ์น˜์™€ ๊ฐ™์ด hotfix ๋ธŒ๋žœ์น˜๋Š” main ๋ธŒ๋žœ์น˜์™€ develop ๋ธŒ๋žœ์น˜ ๋ชจ๋‘์— ๋ณ‘ํ•ฉํ•˜๊ณ  hotfix ๋ธŒ๋žœ์น˜๋Š” ์‚ญ์ œ

Last updated