โ€ป ์ด ๊ธ€์€ ์ฝ”๋“œํ”„๋ ˆ์†Œ ์ฒดํ—˜๋‹จ ํ™œ๋™์„ ํ•˜๋ฉด์„œ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค.
โ€ป ์‹ค๋ฌด์ž๊ฐ€ ์•Œ๋ ค์ฃผ๋Š” Git ํ™œ์šฉํ•œ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.
โ€ป ์ฝ”๋“œํ”„๋ ˆ์†Œ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Git ๋ธŒ๋žœ์น˜

๋ธŒ๋žœ์น˜๋ž€?

  • ๊ธฐ๋ณธ ๋ธŒ๋žœ์น˜๋กœ๋ถ€ํ„ฐ ํŒŒ์ƒํ•œ ๋…๋ฆฝ์ ์ธ ์ž‘์—… ๊ณต๊ฐ„
  • ์ตœ์‹  ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ผ์ข…์˜ ํฌ์ธํ„ฐ
  • ๋งค์šฐ ๊ฐ€๋ฒผ์›€
  • ์ƒ์„ฑ, ์ด๋™, ๋ณ‘ํ•ฉ(merge)์ด ๋งค์šฐ ์‰ฌ์›€

master๋ธŒ๋žœ์น˜

  • Git์€ ๊ธฐ๋ณธ์ ์œผ๋กœ master๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • master๋ธŒ๋žœ์น˜๋Š” ์ฒซ ๋ฒˆ์งธ ์ปค๋ฐ‹์„ ๋งŒ๋“ค์–ด์•ผ ์ƒ์„ฑ๋œ ์ปค๋ฐ‹์„ ๊ฐ€๋ฆฌํ‚ฌ์ˆ˜ ์žˆ๋‹ค.
  • ํ˜„์žฌ ๋ธŒ๋žœ์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ผ์ข…์˜ ํฌ์ธํ„ฐ
  • ํ˜„์žฌ ๋ธŒ๋žœ์น˜์˜ ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹์— ๋Œ€ํ•œ ์Šค๋ƒ…์ƒท

์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์ด ์‹œ์ž‘๋˜๋ฉด?

  • ๋ธŒ๋žœ์น˜๋Š” ๋ชฉ์ ์— ๋”ฐ๋ผ ๋ถ„๊ธฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ธŒ๋žœ์น˜ ๋ถ„๊ธฐ ์ „๋žต์€ ์กฐ์ง์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค.

๋ธŒ๋žœ์น˜ ์ด๋™(checkout)

$ git checkout ์ด๋™ํ•  ๋ธŒ๋žœ์น˜๋ช…

  • Head๋Š” checkout๋Œ€์ƒ ๋ธŒ๋žœ์น˜๋กœ ์ด๋™ํ•œ๋‹ค.
  • ๋กœ์ปฌ ์ €์žฅ์†Œ์˜ ์ƒํƒœ๋Š” Head๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹์ด ์ตœ์‹ ์ด๋˜๊ณ ,
  • ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ ์ƒํƒœ๋„ ๋ณ€๊ฒฝ๋œ๋‹ค.

๊ฐœ๋ฐœ์ค‘ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด?

  • master๋ธŒ๋žœ์น˜์—์„œ issue ๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ
    $ git barnch issue
    $ git checkout issue
  • ์ดํ›„ ์ด์Šˆ๊ฐ€ ์žˆ๋Š” ํŒŒ์ผ์„ ๊ณ ์น˜๊ณ  addํ•˜๊ณ  commit ํ•œ๋‹ค.

์ด์Šˆ ํ•ด๊ฒฐ์ด ์™„๋ฃŒ๋˜๋ฉด? - ๋ธŒ๋žœ์น˜ ๋ณ‘ํ•ฉ(merge)

  • ๊ธฐ์ค€์ด ๋˜๋Š” ๋ธŒ๋žœ์น˜๋กœ ์ด๋™ํ•ด์„œ ๋ณ‘ํ•ฉํ•œ๋‹ค.
    - issue๋ธŒ๋žœ์น˜์—์„œ master๋ธŒ๋žœ์น˜๋กœ ์ด๋™
    - $ git checkout master
  • ํ•ฉ์ณ์งˆ ๋ธŒ๋žœ์น˜๋ฅผ ๋ณ‘ํ•ฉํ•œ๋‹ค.
    - $ git merge issue
  • ๋”์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ธŒ๋žœ์น˜๋Š” ์‚ญ์ œํ•˜๊ธฐ
    - $ git branch -d issue

๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋˜๋ฉด?

๋ชจ๋“  ๋ธŒ๋žœ์น˜ ๋ณ‘ํ•ฉํ•œ๋‹ค.

3-way Merge

  • ์•„๋ž˜ 3๊ฐœ ์ปค๋ฐ‹์„ ๋ชจ๋‘ ๊ณ ๋ คํ•˜์—ฌ ๋ณ‘ํ•ฉํ•˜๋Š” ๋ฐฉ์‹
  • 3-way merge์˜ ๊ฒฐ๊ณผ๋Š” ์ƒˆ๋กœ์šด ์ปค๋ฐ‹์œผ๋กœ ์ƒ์„ฑ๋จ


๋ธŒ๋žœ์น˜ ๋ณ‘ํ•ฉ์€ ํ•ญ์ƒ ์„ฑ๊ณตํ•˜๋Š”๊ฐ€?

  • ์•„๋‹ˆ๋‹ค! ๋จธ์ง€ํ•ด์•ผํ•˜๋Š” ํŒŒ์ผ์˜ ๋‚ด์šฉ์ด ๋‹ค๋ฅผ๊ฒฝ์šฐ ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š๋Š”๋‹ค

๋ณ€๊ฒฝ์‚ฌํ•ญ์˜ ์ถฉ๋Œ(conflict)

  • ๊ฐœ๋ฐœํ•˜๋Š” ๊ธฐ๋Šฅ์˜ ๋ชฉ์ ์— ๋งž๊ฒŒ ์–ด๋–ค ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์–ด๋–ป๊ฒŒ ๋ฐ˜์˜ํ• ์ง€ ๊ฒฐ์ •ํ•˜๊ณ  ์ˆ˜์ •ํ•˜์—ฌ ๋ฐ˜์˜ํ•˜๋Š”๊ฒƒ์„ conflict์„ ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •์ด๋ผ ํ•œ๋‹ค.

์ถฉ๋Œ์˜ ํ•ด๊ฒฐ

  • ์ง์ ‘ mergeํ•˜๊ธฐ
    - vi๋กœ ํŒŒ์ผ์„ ์ง์ ‘์ˆ˜์ •ํ•œ๋‹ค.
  • mergetool ์‚ฌ์šฉํ•˜๊ธฐ
    - ๊ฐœ๋ฐœ์ž์˜ ์˜๋„๋Œ€๋กœ ์ˆ˜์ •ํ•˜๊ณ 
    - conflict ๊ธฐํ˜ธ ์ œ๊ฑฐ
    - ์ˆ˜์ •์ด ์™„๋ฃŒ๋˜๋ฉด ์ €์žฅํ›„ ์ข…๋ฃŒ
    - ๋‚˜๋จธ์ง€ 3-way ์ฐฝ์€ ์ˆ˜์ • ์—†์ด ์ข…๋ฃŒ
  • ๋ณ‘ํ•ฉ์ด ์ œ๋Œ€๋กœ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ›„, commit ์ƒ์„ฑ

Git์˜ Tag

Git์—์„œ ํƒœ๊ทธ๋ž€?

  • ํƒœ๊ทธ๋Š” ํŠน์ •์‹œ์ ์˜ ์†Œ์Šค์ฝ”๋ฅด ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•จ
  • ํ”„๋กœ์ ํŠธ ์ง„ํ–‰์ค‘ ์˜๋ฏธ์žˆ๋Š” ์‹œ์ ์˜ ์ปค๋ฐ‹์„ ํƒœ๊น…ํ•œ๊ฒƒ
  • ์˜๋ฏธ์žˆ๋Š” ์‹œ์ ์ด๋ž€?
    - 1์ฐจ ๋ชฉํ‘œ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋˜์—ˆ์„๋•Œ
    - ๋งค์šฐ ์ค‘์š”ํ•œ ์ด์ˆ˜๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์„๋•Œ
    - ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ์™„๋ฃŒ๋ฐ ํ…Œ์ŠคํŠธ๋ฅผ ๋ชจ๋‘ ํ†ต๊ณผํ•˜์˜€์„๋•Œ
    - ๊ณ ๊ฐ์—๊ฒŒ ์†Œํ”„ํŠธ์›จ์–ด๋ฅด ๋ฐฐํฌํ• ๋•Œ ๋“ฑ๋“ฑ..

Git ํƒœ๊ทธ ์ข…๋ฅ˜๋ฐ ์ƒ์„ฑํ•˜๊ธฐ

  • Lightweigh ํƒœ๊ทธ
    - ๋ฒ„์ „๋ช…๊ณผ ๊ฐ™์€ ํƒœ๊ทธ๋ช…๋งŒ ๋‚จ๊ธฐ๋Š” ํƒœ๊ทธ
    - $ git tag ํƒœ๊ทธ๋ช…
  • Annotated ํƒœ๊ทธ
    - Git DB์— ํƒœ๊ทธ๋ฅผ ์ž‘์„ฑ์ž์˜ ์ด๋ฆ„, ์ด๋ฉ”์ผ, ํƒœ๊ทธ์ƒ์„ฑ๋‚ ์ž ๋“ฑ์„ ์ €์žฅํ•˜๋Š” ํƒœ๊ทธ
    - $ git tag -a ํƒœ๊ทธ๋ช… -m ํƒœ๊ทธ๋ฉ”์„ธ์ง€

ํŠน์ • ์‹œ์ ์˜ ์ปค๋ฐ‹ ํƒœ๊ทธํ•˜๊ธฐ

  • ํƒœ๊น…ํ•˜๊ณ ์ž ํ•˜๋Š” ์ปค๋ฐ‹์˜ ID๊ฐ’ ํ™•์ธ
  • ์ปค๋ฐ‹ ID ๊ฐ’์„ ์ธ์ž๋กœ ํƒœ๊น…ํ•˜๊ธฐ
  • $ git -a ํƒœ๊ทธ๋ช… ์ปค๋ฐ‹ID -m ํƒœ๊ทธ๋ฉ”์„ธ์ง€

Git ๋ธŒ๋žœ์น˜ ํ™œ์šฉ - GitFlow ๋ชจ๋ธ

  • master branch
  • develop branch
  • feature branch
  • relese branch
  • hotfix branch

master branch

  • ์‹ค์ œ ๊ณ ๊ฐ์—๊ฒŒ ๋ฆด๋ฆฌ์ฆˆ ๋˜๋Š” ๋ธŒ๋žœ์น˜(production)
  • ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ์€ ๊ฒฐ๊ตญ master๋กœ ์ตœ์ข… ๋ฐ˜์˜๋˜์–ด์•ผ ํ•จ

develop branch

  • ์‹ค์ œ ๊ฐœ๋ฐœ์˜ ์ค‘์‹ฌ์ด ๋˜๋Š” ๋ธŒ๋žœ์น˜
  • ์ฆ‰, ๋ชจ๋“ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜๊ณ  ๋ฒ„๊ทธ๊ฐ€ ์ˆ˜์ •๋˜๊ณ , ๊ณ ๊ฐ์—๊ฒŒ ๋ฐฐํฌ๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€์ด ๋˜๋ฉด develop์˜ ๋‚ด์šฉ์€ master ์— ์ตœ์ข… ๋ฐ˜์˜๋˜์–ด์•ผ ํ•จ
  • ๋‹ค์Œ ๋ฐฐํฌํ• ๊ธฐ๋Šฅ ๊ฐœ๋ฐœํ•˜๋Š” ๋ธŒ๋žœ์น˜

feature branch

  • ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ธŒ๋žœ์น˜
  • develop๋ธŒ๋žœ์น˜๋กœ๋ถ€ํ„ฐ ๋ถ€๋‹‰๋˜์–ด ์‚ฌ์šฉ๋จ
  • ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋˜๊ฑฐ๋‚˜ ์Šคํ”„๋ฆฐํŠธ ์ฃผ๊ฐ€๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด develop๋ธŒ๋žœ์น˜๋กœ ๋‚ด์šฉ mergeํ›„ ๋ธŒ๋žœ์น˜ ์‚ญ์ œ๋จ

relese branch

  • ๋ฐฐํฌ๋ฅผ ์ค€๋น„(๊ฒ€์ฆ,์ด์Šˆ์ˆ˜์ • ๋“ฑ) ํ•˜๋Š” ๋ธŒ๋žœ์น˜
  • ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ๋˜๋ฉด master ๋ธŒ๋žœ์น˜๋กœ ๋ณ‘ํ•ฉ
  • relese ๋ธŒ๋žœ์น˜์—์„œ ๊ธฐ๋Šฅ ์ ๊ฒ€์‹œ ๋ฐœ๊ฒฌํ•œ ์ด์Šˆ์— ๋Œ€ํ•œ ์ˆ˜์ •์‚ฌํ•ญ์€ ๋ฐ˜์Šค์‹œ develop์— ๋ณ‘ํ•ฉํ•ด์•ผํ•จ
  • ๋ฐฐํฌ ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด, ์ตœ์ข…master๋กœ ๋ณ‘ํ•ฉํ•˜๊ณ  tag๋ฅผ ๋ช…์‹œํ•ด์•ผ ํ•จ

hotfix branch

  • ๋ฐฐํฌํ•œ ๋ฒ„์ „์—์„œ ๊ธด๊ธ‰ํ•˜๊ฒŒ ์ˆ˜์ •์ด ํ•„์š”ํ•œ ์žฅ์•  ๋ฐ ๋ฒ„๊ทธ ๋ฐœ์ƒ์‹œ ๋Œ€์‘ํ•˜๋Š” ๋ธŒ๋žœ์น˜
  • hotfix๋Š” master๋กœ๋ถ€ํ„ฐ ๋ถ„๊ธฐ๋˜๋ฉฐ, ์ด์Šˆ๊ฐ€ ์ˆ˜์ •๋˜๋ฉด ์ˆ˜์ •์‚ฌํ•ญ์€ master, develop๋ธŒ๋žœ์น˜์— ์ตœ์ข… ๋ฐ˜์˜๋˜์–ด์•ผ ํ•จ
profile
์ž˜ํ•ด ๋ณด๊ฒ ๋‹ค!

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