๐Ÿšง

[Git] Git ๋ธŒ๋žœ์น˜ ์ „๋žต

purpplee 2022. 5. 23. 22:17

Git ๋ธŒ๋žœ์น˜ ์ „๋žต์ด๋ž€

๋ธŒ๋žœ์น˜ ์ „๋žต์ด๋ž€ ์—ฌ๋Ÿฌ ๋ช…์˜ ํ˜‘์—…์ž๊ฐ€ Git์˜ ๋ธŒ๋žœ์น˜๋ฅผ ์‚ฌ์šฉํ•ด ํ•˜๋‚˜์˜ ๊ณต๋™ ์ €์žฅ์†Œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ „๋žต์ด๋‹ค.

 

๋ธŒ๋žœ์น˜ ์ „๋žต์„ ์„ธ์šฐ์ง€ ์•Š๊ณ  ๊ฐœ๋ฐœํ•˜๋ฉด

  • ์ฒด๊ณ„ ์—†๋Š” ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ๊ณผ ๋ณ‘ํ•ฉ
  • ์ค‘๊ตฌ๋‚œ๋ฐฉ ํฉ์–ด์ง„ ์ด์Šˆ์™€ ์ปค๋ฐ‹
  • ๊ทธ์— ๋”ฐ๋ฅธ ํ˜‘์—…์˜ ์–ด๋ ค์›€

์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋Œ€ํ‘œ์ ์ธ ๋ธŒ๋žœ์น˜ ์ „๋žต๋“ค์ธ Git Flow ์™€ Github Flow ๋ฅผ ์‚ดํŽด๋ณด๊ณ ์ž ํ•œ๋‹ค.

 

Git Flow

Git Flow ๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ํฌ๊ฒŒ 5๊ฐ€์ง€ ๋ชฉ์ ์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ฐœ๋ฐœํ•œ๋‹ค.

 

master

์ตœ์ข…์œผ๋กœ ๋ฐฐํฌ๋˜๋Š” ๋ธŒ๋žœ์น˜. ๋ฐฐํฌ ํ›„ ๋ฒ„์ „ ํƒœ๊ทธ(v1.0, v1.1 ๋“ฑ) ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

release

๋ฐฐํฌํ•˜๊ธฐ ์ „ QA๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋ธŒ๋žœ์น˜. develop ๋ธŒ๋žœ์น˜์—์„œ ์ƒ์„ฑ๋˜๊ณ  QA์— ํ†ต๊ณผํ•˜๋ฉด master ๋ธŒ๋žœ์น˜์— ๋จธ์ง€ํ•œ๋‹ค. ์ˆ˜์ • ์‚ฌํ•ญ์ด ์žˆ๋‹ค๋ฉด master ์™€ develop ๋ธŒ๋žœ์น˜์— ๋ฐ˜์˜ํ•œ๋‹ค. ์ดํ›„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๋ฉด ์‚ญ์ œํ•ด๋„ ๋ฌด๊ด€ํ•˜๋‹ค. ๋ณดํ†ต release-* ์œผ๋กœ ๋„ค์ด๋ฐํ•˜๊ณ  * ์ž๋ฆฌ์—๋Š” ์ˆซ์ž๋‚˜ ๋ฒ„์ „์„ ๋ถ™์ธ๋‹ค.

 

develop

๊ฐœ๋ฐœํ•  ๋•Œ์˜ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜. ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์„ ๋•Œ feature ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•ด ๊ฐœ๋ฐœํ•˜๊ณ , ๊ตฌํ˜„ ์™„๋ฃŒ ํ›„ develop ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉํ•œ๋‹ค. ๋‹ค์Œ ๋ฐฐํฌ ๋ฒ„์ „ ๋ถ„๋Ÿ‰๊นŒ์ง€ ๊ฐœ๋ฐœ ์™„๋ฃŒ ํ›„ QA ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด release ๋ธŒ๋žœ์น˜๋กœ ๋จธ์ง€๋œ๋‹ค.

 

feature

์ด์Šˆ ๋ฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์œ„ํ•ด ์ƒ์„ฑํ•˜๋Š” ๋ธŒ๋žœ์น˜. develop ๋ธŒ๋žœ์น˜์—์„œ ์ƒ์„ฑํ•œ๋‹ค. ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์™„๋ฃŒ ํ›„ develop ๋ธŒ๋žœ์น˜์— ๋จธ์ง€ํ•œ ๋’ค feature ๋ธŒ๋žœ์น˜๋Š” ์‚ญ์ œํ•œ๋‹ค. ๋ณดํ†ต feature/๊ธฐ๋Šฅ๋ช… ์œผ๋กœ ๋„ค์ด๋ฐํ•œ๋‹ค.

feature ๋ธŒ๋žœ์น˜๋กœ ๋ถ„๊ธฐํ•จ์œผ๋กœ์จ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ํ•œ ๋ธŒ๋žœ์น˜๋ฅผ ๊ฑด๋“œ๋ ค ์ถฉ๋Œ๋‚  ์ผ์ด ์—†์–ด์ ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋„์ค‘ ์ด์ „ ๋ฒ„์ „์œผ๋กœ ๋˜๋Œ์•„๊ฐ€์•ผํ•  ์ผ์ด ์ƒ๊ฒผ์„ ๋•Œ develop ๋ธŒ๋žœ์น˜๋ฅผ ๋‹ค์‹œ ๋ฐ›์•„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

hotfix

๋ฐฐํฌ ํ›„ release ๋ธŒ๋žœ์น˜์—์„œ ๋ฏธ์ฒ˜ ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ•œ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•ด ๊ธด๊ธ‰ํžˆ ์ˆ˜์ •ํ•ด์•ผํ•  ๋•Œ ์ƒ์„ฑํ•˜๋Š” ๋ธŒ๋žœ์น˜. master ์—์„œ ์ƒ์„ฑํ•˜๊ณ  ์ˆ˜์ • ํ›„ master ์™€ develop ๋ธŒ๋žœ์น˜์— ๋ฐ˜์˜ํ•˜๊ณ  hotfix ๋ธŒ๋žœ์น˜๋Š” ์‚ญ์ œํ•œ๋‹ค. ๋ณดํ†ต hotfix-*๋กœ ๋„ค์ด๋ฐํ•˜๊ณ  * ์ž๋ฆฌ์—๋Š” ์ˆซ์ž๋‚˜ ๋ฒ„์ „์„ ๋ถ™์ธ๋‹ค.

hotfix ๋ธŒ๋žœ์น˜๋กœ ๋ถ„๊ธฐํ•จ์œผ๋กœ์จ ๋ฒ„๊ทธ ์ˆ˜์ • ์ค‘์—๋„ ๊ฐœ๋ฐœ์ž๋“ค์€ develop ๋ธŒ๋žœ์น˜์—์„œ ์˜ํ–ฅ ์—†์ด ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ๋งจ ์ฒ˜์Œ master ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  2. ๋ฒ„์ „ 0.1(์ดˆ๊ธฐ ์ƒํƒœ) ๊ฐœ๋ฐœ์„ ์œ„ํ•ด develop ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. develop ๋ธŒ๋žœ์น˜์—๋Š” ๋ฒ„๊ทธ ์ˆ˜์ • ์ปค๋ฐ‹์ด ์ƒ์‹œ๋กœ ์ถ”๊ฐ€๋œ๋‹ค.
  3. ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ํ•ด์•ผํ•  ๊ฒฝ์šฐ develop ๋ธŒ๋žœ์น˜์—์„œ feature ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•ด ๋ถ„๊ธฐํ•œ๋‹ค.
  4. ๊ตฌํ˜„ ์™„๋ฃŒ๋œ feature ๋ธŒ๋žœ์น˜๋Š” ๋™๋ฃŒ ํ˜น์€ ๊ฒ€ํ† ์ž์—๊ฒŒ ๊ฒ€ํ†  ํ›„ develop ๋ธŒ๋žœ์น˜๋กœ ๋จธ์ง€๋œ๋‹ค.
  5. ๋‹ค์Œ ๋ฆด๋ฆฌ์ฆˆ์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ ๊ตฌํ˜„์ด ์™„๋ฃŒ๋˜๋ฉด develop ๋ธŒ๋žœ์น˜์˜ ๋‚ด์šฉ์„ release ๋ธŒ๋žœ์น˜๋กœ ๋จธ์ง€ํ•œ๋‹ค.
  6. release ๋ธŒ๋žœ์น˜์— ๋ฒ„๊ทธ ์ˆ˜์ • ์ปค๋ฐ‹์ด ์ถ”๊ฐ€๋˜๊ณ , ๋ฒ„๊ทธ ์ˆ˜์ •์ด ์™„๋ฃŒ๋˜๋ฉด develop ๋ธŒ๋žœ์น˜์™€ master ๋ธŒ๋žœ์น˜์— ๋จธ์ง€ํ•œ๋‹ค.
  7. master ๋ธŒ๋žœ์น˜๋Š” ๋ฐ˜์˜๋œ ๋‚ด์šฉ์„ ๋ฒ„์ „ ํƒœ๊ทธ๋ฅผ ๋‹ฌ์•„ ๋ฐฐํฌํ•œ๋‹ค. (version +1)
  8. ๋ฐฐํฌ ํ›„ ๋ฐœ๊ฒฌ๋œ ๋ฒ„๊ทธ๋Š” ๊ธด๊ธ‰ ์ˆ˜์ •์„ ์œ„ํ•ด hotfix ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•ด ์ˆ˜์ •ํ•œ๋‹ค.
  9. hotfix ๋ธŒ๋žœ์น˜์—์„œ ์ˆ˜์ •์ด ๋๋‚˜๋ฉด develop ๋ธŒ๋žœ์น˜์™€ master ๋ธŒ๋žœ์น˜์— ๋ฐ˜์˜ํ•˜๊ณ  ๋ฒ„์ „ ํƒœ๊ทธ๋ฅผ ๋‹ฌ์•„ ๋ฐฐํฌํ•œ๋‹ค. (version +0.1)

Git Flow ์ „๋žต์€ ๋ฐฐํฌ, ํ…Œ์ŠคํŠธ, ๊ฐœ๋ฐœ, ๊ธฐ๋Šฅ๊ตฌํ˜„, ๋ฒ„๊ทธ์ˆ˜์ • ๋“ฑ์„ ํ™•์‹คํžˆ ๋ถ„๋ฆฌํ•˜์—ฌ ํฐ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•œ ์ „๋žต์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ด€๋ฆฌํ•  ๋ธŒ๋žœ์น˜๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋งŽ์€ ์ , master ์™€ release ๋ธŒ๋žœ์น˜์˜ ๊ฒฝ๊ณ„๊ฐ€ ๋ชจํ˜ธํ•œ ์  ๋“ฑ์˜ ์ด์œ ๋กœ Github ๋‚˜ ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•˜๊ธฐ์—” ๋ณต์žกํ•˜๋‹ค. ์ด์— Git Flow ๋ฅผ ๊ฐ„ํŽธํ™”ํ•œ Github Flow ์ „๋žต์ด ๋‚˜์™”๋‹ค.

 

Github Flow

์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ, ๋ฐฐํฌ์ž๋™ํ™”๊ฐ€ ๋œ Github ๋“ฑ์˜ ํ”„๋กœ์ ํŠธ์— Git Flow ๋ฅผ ์ ์šฉํ•˜๊ธฐ ๋ณต์žกํ•ด ๊ทธ ํ๋ฆ„์„ ๊ฐ„ํŽธํ™”ํ•œ Git ๋ธŒ๋žœ์น˜ ์ „๋žต์ด๋‹ค.

 

master ๋ธŒ๋žœ์น˜๋ฅผ ๋ฉ”์ธ์œผ๋กœ ๋‘๊ณ  ๊ธฐ๋Šฅ ๊ตฌํ˜„, ๋ฒ„๊ทธ ์ˆ˜์ • ๋“ฑ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ชจ๋‘ master ๋ธŒ๋žœ์น˜์— ๋จธ์ง€ํ•œ๋‹ค.

 

ํ•ต์‹ฌ์€ ๋จธ์ง€ํ•˜๊ธฐ ์ „ pull request ๋ฅผ ํ†ตํ•œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋กœ ๋ฌธ์ œ์‚ฌํ•ญ์„ ๊ผผ๊ผผํžˆ ํ™•์ธํ•˜๊ณ  ๋ฐฐํฌ ์ „ ๋ผ์ด๋ธŒ ์„œ๋ฒ„์—์„œ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ, ๋จธ์ง€ ํ›„ ๋ฐฐํฌ๊ฐ€ ์ž๋™์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒƒ์ด๋‹ค.

 

  1. master ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  2. ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์•ผํ•˜๊ฑฐ๋‚˜ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ด์Šˆ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  3. ๊ฐœ๋ฐœ์ž๋“ค์€ ์ด์Šˆ ํ•ด๊ฒฐ์„ ์œ„ํ•ด feature ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ธํžˆ ๋‚จ๊ธด๋‹ค. ๋˜ ๋กœ์ปฌ ์ž‘์—… ๋‚ด์šฉ์ด ๋‚ ์•„๊ฐ€๊ฑฐ๋‚˜ ์ด์ „ ๋‚ด์šฉ์œผ๋กœ ๋Œ์•„๊ฐˆ ์ผ์ด ์žˆ์„ ๋•Œ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ์›๊ฒฉ ๋ธŒ๋žœ์น˜์— ์ˆ˜์‹œ๋กœ push ํ•ด์ค€๋‹ค.
  4. ๊ธฐ๋Šฅ ๊ตฌํ˜„ ํ˜น์€ ๋ฒ„๊ทธ ์ˆ˜์ •์ด ์™„๋ฃŒ๋˜๋ฉด pull request ๋ฅผ ๋‚ ๋ฆฐ๋‹ค. ํŒ€์›๋“ค ํ˜น์€ ๊ฒ€ํ† ์ž๋Š” pull request ๋ฅผ ๋ณด๊ณ  ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ํ•œ๋‹ค. release ๋ธŒ๋žœ์น˜๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๊ผผ๊ผผํžˆ ํ”ผ๋“œ๋ฐฑํ•ด์•ผ ํ•œ๋‹ค.
  5. ๋ฆฌ๋ทฐ๊ฐ€ ๋๋‚˜๋ฉด ๋จธ์ง€ํ•˜๊ธฐ ์ „ ๋ผ์ด๋ธŒ ์„œ๋ฒ„ ํ˜น์€ ํ…Œ์ŠคํŠธ ์„œ๋ฒ„์—์„œ ์ตœ์ข… ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค. ๋ฐฐํฌ์‹œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด master ๋ธŒ๋žœ์น˜์˜ ๋‚ด์šฉ์œผ๋กœ ๋‹ค์‹œ ๋ฐฐํฌํ•œ๋‹ค.
  6. ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์œผ๋‹ˆ master ๋ธŒ๋žœ์น˜๋กœ ๋จธ์ง€ํ•œ๋‹ค. ์ด๋•Œ ๋ฐฐํฌ๋Š” ์ž๋™์œผ๋กœ ์ฆ‰์‹œ ๋ฐฐํฌ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

Github Flow๋Š” ๊ด€๋ฆฌํ•  ๋ธŒ๋žœ์น˜๊ฐ€ ์ ์–ด ์ ์šฉํ•˜๊ธฐ ์‰ฝ์ง€๋งŒ ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด ์น˜๋ช…์ ์ธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ˆ˜์‹œ๋กœ ๋ฐฐํฌ๋˜์–ด์•ผ ํ•˜๋Š” ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•˜๋‹ค.

๋ฐ˜์‘ํ˜•