๐Ÿ“† 22.10.05 - git & git flow ๋ถ€์…”๋ฒ„๋ฆฌ๊ธฐ

๋ฒ„๋“คยท2022๋…„ 10์›” 6์ผ
0

โœจToday I Learn (TIL)

๋ชฉ๋ก ๋ณด๊ธฐ
4/62
post-thumbnail

ํ˜‘์—…์— ์žˆ์–ด์„œ ๊ฐœ๋ฐœ์ž๋Š” Github๋ฅผ ๋นผ๋†“์„ ์ˆ˜๊ฐ€ ์—†๋‹ค..
์˜ค๋Š˜์€ ๊ฐ„๋žตํ•˜๊ฒŒ ๋ผ๋„ git flow ํ˜‘์—…๋ฐฉ์‹์— ๋Œ€ํ•ด์„œ ๊ธฐ์ˆ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

git flow?

ํ˜‘์—…์—์„œ A๋ผ๋Š” ์‚ฌ๋žŒ๊ณผ B๋ผ๋Š” ์‚ฌ๋žŒ์ด ๊ธฐ๋Šฅ๋ณ„๋กœ ์—ญํ• ์„ ๋‚˜๋ˆ„์—ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๊ทธ ์‚ฌ๋žŒ๋“ค์ด ๊ฐ™์€ branch์—์„œ ์ž‘์—…์„ ํ•˜๊ฒŒ ๋˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ๋งก๊ฒŒ๋˜์–ด ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์ด ์ ๋‹คํ•ด๋„, ๊ณ„์†ํ•ด์„œ ๊ธฐ๋Šฅ๋“ค์„ ๋‚˜๋ˆ„์–ด ๊ฐ™์€ ๊ณต๊ฐ„์—์„œ ์ž‘์—…์„ ํ•˜๋ฉด, PR ํ›„์— ์ˆ˜๋งŽ์€ conflict๋ฅผ ๋งˆ์ฃผํ•˜๊ฒŒ ๋˜๊ณ , ๋˜ํ•œ ๊ณ„์† ๊ฐ™์€ ๋ถ€๋ถ„์„ ๋งŒ์ง€๊ฒŒ ๋˜์–ด ์–ด๋Š ์ˆœ๊ฐ„ pull์„ ๋•ก๊ฒผ์„ ๋•Œ, ๋‚ด๊ฐ€ ์—ด์‹ฌํžˆ ๋งŒ๋“  ๋ถ€๋ถ„์ด ๋ฎ์—ฌ์”Œ์—ฌ์งˆ ์ˆ˜๋„ ์žˆ๋‹ค.

๊ทธ๋Ÿฐ ๋ถˆ์ƒ์‚ฌ๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด github ๋ธŒ๋žœ์น˜๋ฅผ ์ ๊ทน ํ™œ์šฉํ•ด์•ผ ํ•œ๋‹ค!

github ๋‚ด์—์„œ branch๋ฅผ ์ด์šฉ / ์šด์˜ํ•˜๋Š” ๋ธŒ๋žœ์น˜ ์ „๋žต์„ git flow๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค
์ด ๋ธŒ๋žœ์น˜๋Š” ํฌ๊ฒŒ master, develop, feature, release, hotfix๋ฅผ ๊ธฐ๋ณธ ๋ชจ๋ธ๋กœ ์žก๊ณ ํ•˜๋ฉด ํŽธํ•˜๋‹ค. (ํ˜„์—…์—์„œ๋„ ์ด๋Ÿฐ git flow ๋ธŒ๋žœ์น˜ ๋ช…์„ ์ž์ฃผ ์ด์šฉํ•œ๋‹ค๊ณ  ํ•จ!)

์œ„์˜ 5๊ฐœ์˜ ๋ธŒ๋žœ์น˜๋ฅผ ์ด๋ฆ„์„ ์ €๋ ‡๊ฒŒ ์ •ํ•˜๊ฒŒ ๋œ ์ด์œ ๋Š” ํ•ด๋‹น ๋ธŒ๋žœ์น˜์—์„œ ๋งก๊ฒŒ๋˜๋Š” ๊ธฐ๋Šฅ์„ ์•Œ๊ฒŒ๋˜๋ฉด ์ดํ•ด๊ฐ€ ์‰ฌ์šธ ๊ฒƒ์ด๋‹ค.

  • master : ์ •์‹์œผ๋กœ ๋ฐฐํฌ๋˜๋Š” ์ฝ”๋“œ๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” ์ตœ์ข… ๋ธŒ๋žœ์น˜. Github Action ๋“ฑ์œผ๋กœ CI / CD๊ฐ€ ์ž˜ ๋˜์–ด์žˆ๋Š” ๊ณณ์— master ๋ธŒ๋žœ์น˜๋ฅผ deploy branch๋กœ ๊ฑธ์–ด๋‘๋ฉด master์— ๋ณ€๊ฒฝ์ ์ด ์žˆ์„ ๋•Œ๋งˆ๋‹ค, ๊ทธ ๋ณ€๊ฒฝ์ ์„ ๋ฐฐํฌ ์‚ฌ์ดํŠธ์— ์ ์šฉ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. => (netlify, vercel ๋„ ์‚ฌ์šฉํ•ด๋ณด์„ธ์š”)
    ์ผ์ผ์ด ์ •์ ์œผ๋กœ npm run build build ํŒŒ์ผ๋“ค์„ ๊ณ„์† ๋ณ€๊ฒฝ ๋  ๋•Œ๋งˆ๋‹ค ๋ฐฐํฌ ์‚ฌ์ดํŠธ์— ์ ์šฉ์‹œ์ผœ์ฃผ๋Š” ๊ท€์ฐฎ์Œ์„ ํ•ด๊ฒฐํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค..!
    ๋‹จ, ์ด ๋ธŒ๋žœ์น˜๋Š” ์ •๋ง ๋ฐฐํฌ ๋งŒ์„ ์œ„ํ•œ ๋ธŒ๋žœ์น˜์ด๋ฏ€๋กœ, ํŒ€์›๋“ค๋ผ๋ฆฌ ์„œ๋กœ ๋งŒ๋“  ๊ธฐ๋Šฅ์„ ํ•ฉ์ณ์„œ ๊ทธ ๋ถ€๋ถ„์—์„œ ์ž˜๋ชป๋œ ๋ถ€๋ถ„์„ ๋ฏธ๋ฆฌ ์ฐพ๊ณ  ์™„์„ฑ๋ณธ์„ ํ•ด๋‹น ๋ธŒ๋žœ์น˜์— ๋ฐ˜์˜์„ ํ•ด์•ผ๋œ๋‹ค. ๋งŒ์•ฝ์— ๋ญ”๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ master๋กœ ๋„˜์–ด์˜ค๊ฒŒ๋œ๋‹ค๋ฉด, ๋ฐ”๋กœ ๋ฐฐํฌ์— ์ ์šฉ์ด ๋˜์–ด ์œ ์ €๋“ค์ด ํฐ์ƒ‰ ํ™”๋ฉด์„ ๋ณด๊ฒŒ ๋  ์ˆ˜๋„ ์žˆ๋‹ค.

  • develop : ์œ„์˜ ๋ฌธ์ œ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ•˜๊ธฐ ์ „์— ๋ฏธ๋ฆฌ ๋ชจ๋“  ๊ฐœ๋ฐœ ๊ด€๋ จ ์ฝ”๋“œ๋“ค์„ ํ•œ๋ฒˆ ํ•ฉ์ณ๋ด์„œ ๊ฒ€ํ† ๊นŒ์ง€ ํ•˜๋Š” ๋ธŒ๋žœ์น˜๋ฅผ develop์ด๋ผ๊ณ  ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ฐ์ž ๋‚˜๋ˆˆ ๊ธฐ๋Šฅ์„ ํ•ฉ์ณ๋ณด๊ณ  client server์—์„œ ์ž˜ ๊ตฌํ˜„์ด ๋œ๋‹ค๋ฉด master branch PR์„ ํ•˜๊ฒŒ ๋˜๋ฉด ๊น”๋”ํ•˜๊ฒŒ ๋ฐฐํฌ์„œ๋ฒ„์— ๋ฌธ์ œ ์—†์ด ๋ฐ˜์˜์ด ๋  ๊ฒƒ์ด๋‹ค.

  • feature : ํ•ด๋‹น ๋ธŒ๋žœ์น˜๋Š” ๋ง ๊ทธ๋Œ€๋กœ ๊ธฐ๋Šฅ, ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜์ด๋‹ค.
    ํŒ€์›๋“ค์ด ๊ฐ์ž์˜ ๊ธฐ๋Šฅ์„ ๋‚˜๋ˆˆ ๋ถ€๋ถ„์„ feature๋ผ๋Š” ์ด๋ฆ„์˜ ๋ธŒ๋žœ์น˜๋กœ ๋‚˜๋ˆ ์„œ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.
    ๋‹ค๋ฅธ ๋ถ„๋“ค์€ ์–ด๋–ป๊ฒŒ ํ•ด๋‹น ๋ธŒ๋žœ์น˜๊ฐ€ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๋ธŒ๋žœ์น˜์ด๋‹ค..! ๋ผ๊ณ  ์ •์˜ํ•˜๋Š”์ง€๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค. ๋‚ด ์ƒ๊ฐ์€ ์ด ๊ฐœ๋ฐœ์ด๋ผ๋Š”๊ฒŒ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“œ๋Š” ์‚ฌ๋žŒ๋“ค๋ผ๋ฆฌ์˜ ์•ฝ์†๋งŒ ์ž˜ ์ •์˜๊ฐ€ ๋œ๋‹ค๋ฉด ์ƒ๊ด€์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์ผ€์ด์Šค์ด๋‹ค.
    ๋‚˜๋Š” feature/login (๋กœ๊ทธ์ธ ํŒŒํŠธ), feature/mainpage (๋ฉ”์ธํŽ˜์ด์ง€) ๋“ฑ์œผ๋กœ ์‚ฌ์šฉ์„ ํ•˜๊ณ  ์žˆ๋‹ค.
    ( ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ์œผ์‹œ๋ฉด ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์„ธ์š”! ์„œ๋กœ ์ข‹์€ ์ •๋ณด ๊ณต์œ ํ•ด๊ฐ€๋ฉด์„œ ๊ฐœ๋ฐœํ•ฉ์‹œ๋‹ค )

  • release : ์„ฑ๋Šฅ ๊ฐœ์„  ๊ทธ๋ฆฌ๊ณ  ๋ฒ„๊ทธ ์ˆ˜์ •์„ ์œ„ํ•œ ๋ธŒ๋žœ์น˜์ด๋‹ค. ๊ตฌ๊ธ€๋ง์„ ํ•ด๋ณด๋‹ˆ ์ด๋ ‡๊ฒŒ ์ •์˜๊ฐ€ ๋˜์–ด์žˆ์–ด์„œ ๊ธฐ์ˆ ์„ ํ•ด๋ณธ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋‚˜๋Š” ํ•ด๋‹น ๊ธฐ๋Šฅ์ด ์žˆ๋Š” feature ๋ธŒ๋žœ์น˜์—์„œ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด๋„ ๊ดœ์ฐฎ๋‹ค๊ณ  ์ƒ๊ฐ์„ ํ•˜๊ธฐ ์‚ฌ์šฉ์„ ํ•ด๋ณธ ์ ์ด ์—†๋‹ค.. (์ด๊ฒƒ๋„ ์˜๊ฒฌ ๋“ฑ์„ ๋ฐ›๊ณ ์‹ถ์Šต๋‹ˆ๋‹ค!)

  • hotfix : ๊ธ‰ํ•˜๊ฒŒ ๊ธด๊ธ‰ ํŒจ์น˜ ์ž‘์—…์„ ํ•ด์•ผ๋˜๋Š” ๋ธŒ๋žœ์น˜๋กœ ๋ณ€๊ฒฝ์ ์€ develop์œผ๋กœ ๊ฑฐ์น˜์ง€ ๋ง๊ณ  ๋ฐ”๋กœ master๋กœ PR์„ ํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์˜์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค.

git flow์— ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” git ๋ช…๋ น์–ด

์ฒ˜์Œ์— ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค์–ด์•ผ์ง€ ์‹œ์ž‘์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ณดํ†ต ์ฒ˜์Œ ํ”„๋กœ์ ํŠธ๋ฅผ ์—ด๋ฉด main์ด๋ผ๋Š” ๋ธŒ๋žœ์น˜๊ฐ€ ๋ณด์ผ ๊ฒƒ์ด๋‹ค. ์ด๋•Œ ๋‚ด๊ฐ€ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค๊ณ  ํ•ด๋‹น ๋ธŒ๋žœ์น˜๋กœ ๋ฐ”๋กœ ๋„˜์–ด๊ฐ€๊ณ ์‹ถ๋‹ค!
์ด๋Ÿด๋•Œ ์“ฐ๋Š” ๋ช…๋ น์–ด๊ฐ€ ๋ฐ”๋กœ git checkout -b ๋ธŒ๋žœ์น˜๋ช…

์ด ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๋ฐ”๋กœ ํ•ด๋‹น ๋ธŒ๋žœ์น˜๋กœ ๋„˜์–ด๊ฐ€์ ธ์„œ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์ •๋ง ์œ ์šฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์‹ค์ œ๋กœ ์ฃผ๋ณ€ ๋™๋ฃŒ๋“ค๋„ ๋‚ด๊ฐ€ ์•Œ๋ ค์ค€ ์ดํ›„๋กœ ๋ฒ„๋ฆ‡์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋ช…๋ น์–ด์ด๋‹ค. (์ข€ ๋ฟŒ๋“ฏํ•ฉ๋‹ˆ๋‹ค ใ…Ž)

๊ทธ๋ฆฌ๊ณ  ์ด๋ ‡๊ฒŒ ๋งŒ๋“  ๋ธŒ๋žœ์น˜๋Š” ๋‚ด local branch (๋‚ด ์ปดํ“จํ„ฐ์—์„œ ๋งŒ๋“ค์–ด์ง„ branch) ์ด์ง€ remote branch (github์— ์—ฐ๋™๋œ ๋ธŒ๋žœ์น˜) ๊ฐ€ ์•„๋‹ˆ๋ผ์„œ ์—ฐ๋™์„ ์‹œ์ผœ์ค˜์•ผํ•œ๋‹ค.

๋จผ์ € git branch ๋ช…๋ น์–ด๋กœ ๋‚ด ๋กœ์ปฌํ™˜๊ฒฝ์˜ ๋ธŒ๋žœ์น˜๋ฅผ ๋ณผ ์ˆ˜๊ฐ€ ์žˆ์œผ๋ฉฐ, git branch -r๋กœ remote ํ™˜๊ฒฝ, ์ฆ‰ github์˜ ๋ธŒ๋žœ์น˜๋ฅผ ๋ณผ ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

๋งŒ์•ฝ ๋‚ด๊ฐ€ ๋ฐฉ๊ธˆ ๋งŒ๋“  ๋ธŒ๋žœ์น˜๊ฐ€ ์—†๋‹ค๋ฉด push๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด ๋ฐ”๋กœ remote ํ™˜๊ฒฝ์— ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ํŒ์œผ๋กœ ๋งŒ์•ฝ์— ๋‹ค๋ฅธ ํŒ€์›์ด ๋งŒ๋“  ๋ธŒ๋žœ์น˜๋ฅผ ๋‚ด๊ฐ€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด์•ผ๋˜๋Š” ์ผ์ด ์ƒ๊ฒผ๋‹ค..!
๊ทผ๋ฐ ๋‚ด๊ฐ€ ๋งŒ๋“  ๋ธŒ๋žœ์น˜๊ฐ€ ์•„๋‹ˆ๋ผ์„œ ์ ‘๊ทผ์ด ์–ด๋ ค์›Œ..
์ด๋Ÿด ๋•Œ๋Š” ํ•ด๋‹น remote ์— ์žˆ๋Š” ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์„ ๋˜‘๊ฐ™์ดํ•ด์„œ ๋‚ด local ๋ธŒ๋žœ์น˜์— ์ƒ์„ฑํ•ด์ฃผ๊ณ  ์ดํ›„ push๋ฅผ ํ•˜๋ฉด commit ์ด ๋ฐ”๋กœ ์—ฐ๋™์ด ๋ฉ๋‹ˆ๋‹ค

์ด์ œ remote ํ™˜๊ฒฝ์—์„œ ๋ฐ˜์˜ํ•˜๋Š” ์ˆœ์„œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.
git init (์ƒˆ๋กœ ์ƒ์„ฑ๋œ ํŒŒ์ผ๋“ฑ์„ ๋“ฑ๋ก) -> git add . (๋‚ด๊ฐ€ ์ž‘์—…์„ ํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ์„ git์— ์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€) ๋งŒ์•ฝ ๋ฌด์Šจ ํŒŒ์ผ๋“ค์ด ์ถ”๊ฐ€๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด git status๋กœ ํ™•์ธ -> git commit -m "์ปค๋ฐ‹์ด๋ฆ„" (commit ๋งŒ๋“ค๊ธฐ) -> git push origin ๋ธŒ๋žœ์น˜ ๋ช… (git์— ๋“ฑ์žฌ)

๊ทธ๋Ÿฐ๋ฐ push ๊ณผ์ •์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋„ ์žˆ๋‹ค. ๊ทธ๋•Œ ํ„ฐ๋ฏธ๋„์„ ์ž์„ธํžˆ ๋“ค์—ฌ๋‹ค ๋ณด๋ฉด git pull...์ด๋ผ๋Š” ๊ธ€๊ท€๊ฐ€ ๋ณด์ด๋ฉด ํ•ด๋‹น ๋ธŒ๋žœ์น˜์— ๋ณ€๊ฒฝ์ ์ด ์žˆ์œผ๋‹ˆ pull ๋ฐ›์•„์„œ ํ™•์ธํ•˜๊ณ  ๊ทธ ํ•ฉ๋ณธ์„ ๋‹ค์‹œ push ํ•ด๋ผ ๋ผ๋Š” ๋œป์ด๋‹ค.
๊ทธ๋ ‡๋‹ค๋ฉด git pull origin ๋ธŒ๋žœ์น˜ ๋ช…์œผ๋กœ ๋ฐ›์•„์™€์„œ ํ™•์ธ ํ›„ ๋‹ค์‹œ push ํ•ด์ฃผ๋ฉด ์ •์ƒ์ ์œผ๋กœ ์˜ฌ๋ผ๊ฐ„๋‹ค.

์—ฌ๊ธฐ๊นŒ์ง€๊ฐ€ ๊ธฐ๋ณธ์ ์ธ ๋ธŒ๋žœ์น˜์—์„œ commit ๋ณ€๊ฒฝ ์ ์„ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

git flow ์˜ ์žฅ์ 

  • ์‚ฌ์šฉ์ด ๊ฐ„ํŽธํ•ด์ € ์‰ฝ๊ฒŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • branch ๊ด€๋ฆฌ๊ฐ€ ํ› ~~์–ผ์”ฌ ํด-๋ฆฐํ•ด์ง„๋‹ค
  • ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ์‰ฌ์›Œ์ง
  • ๋ฐฐํฌ ๋ฐ ์ˆ˜์ •์ด ๊ฐ„ํŽธํ•ด์ ธ ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅ
profile
ํƒœ์–ด๋‚œ ๊น€์— ๋งŽ์€ ๊ฒฝํ—˜์„ ํ•˜๋ ค๊ณ  ์•„๋“ฑ๋ฐ”๋“ฑ ์• ์“ฐ๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€