Study: DeveloperTools(DevTool)/DevTool: Git

[Git] Git branch ์ „๋žต (Git flow๋ณด๋‹ค ์ค‘์š”ํ•œ ๊ฒƒ์€.. Code Review)

DrawingProcess 2022. 9. 16. 08:26
๋ฐ˜์‘ํ˜•
๐Ÿ’ก ๋ณธ ๋ฌธ์„œ๋Š” 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 ๊ณผ์ •

  1. master ๋ธŒ๋žœ์น˜์—์„œ develop ๋ธŒ๋žœ์น˜๋ฅผ ๋ถ„๊ธฐํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ฐœ๋ฐœ์ž๋“ค์€ develop ๋ธŒ๋žœ์น˜์— ์ž์œ ๋กญ๊ฒŒ ์ปค๋ฐ‹์„ ํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ธฐ๋Šฅ ๊ตฌํ˜„์ด ์žˆ๋Š” ๊ฒฝ์šฐ develop ๋ธŒ๋žœ์น˜์—์„œ feature/* ๋ธŒ๋žœ์น˜๋ฅผ ๋ถ„๊ธฐํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ฐฐํฌ๋ฅผ ์ค€๋น„ํ•˜๊ธฐ ์œ„ํ•ด develop ๋ธŒ๋žœ์น˜์—์„œ release/* ๋ธŒ๋žœ์น˜๋ฅผ ๋ถ„๊ธฐํ•ฉ๋‹ˆ๋‹ค.
  5. ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฒ„๊ทธ ์ˆ˜์ •์€ release/* ๋ธŒ๋žœ์น˜์— ์ง์ ‘ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.
  6. ํ…Œ์ŠคํŠธ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด release ๋ธŒ๋žœ์น˜๋ฅผ master์™€ develop์— mergeํ•ฉ๋‹ˆ๋‹ค.

2. github flow

Git-flow๊ฐ€ Github์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ์—๋Š” ๋ณต์žกํ•˜๋‹ค๊ณ  ๋‚˜์˜จ ๋ธŒ๋žœ์น˜ ์ „๋žต์ž…๋‹ˆ๋‹ค. hotfix ๋ธŒ๋žœ์น˜๋‚˜ feature ๋ธŒ๋žœ์น˜๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์œผ๋ฉฐ, master๋กœ mergeํ•  ๋•Œ๋งˆ๋‹ค ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. master๋กœ mergeํ•  ๋•Œ, pull request๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋ฉฐ review๋ฅผ ๋ฐ›๊ณ  merge๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. CI์™€ ๋ฐฐํฌ๊ฐ€ ์ž๋™ํ™”๋˜์–ด์žˆ๋Š” ํ”„๋กœ์ ํŠธ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

github flow ๊ณผ์ •

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

๊ธด ๊ธ€ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ 

๋ฐ˜์‘ํ˜•