ram2 πŸš—

[Git] 브랜치 μ „λž΅ (Git, GitHub, GitLab) λ³Έλ¬Έ

🐈‍⬛ git

[Git] 브랜치 μ „λž΅ (Git, GitHub, GitLab)

coram22 2024. 7. 27. 02:44
728x90
λ°˜μ‘ν˜•
μ—¬λŸ¬ κ°œλ°œμžκ°€ ν•˜λ‚˜μ˜ μ €μž₯μ†Œμ— μž‘μ—… ν•  λ•Œ, 보닀 효과적으둜 ν˜‘μ—…ν•˜κΈ° μœ„ν•΄ git branch 에 λŒ€ν•œ κ·œμΉ™μ„ μ •ν•˜κ³  μ €μž₯μ†Œλ₯Ό 잘 ν™œμš©ν•˜κΈ° μœ„ν•œ workflow λ₯Ό μ •μ˜ν•˜λŠ” 것을 λ°”λ‘œ git branch μ „λž΅μ΄λΌκ³  ν•œλ‹€.

κ°œλ°œμ„ ν•  λ•Œ, μΆ”κ°€λœ κΈ°λŠ₯μ΄λ‚˜ μˆ˜μ •μ‚¬ν•­μ΄ μ„œλ‘œ 영ν–₯을 주지 μ•Šκ³ , λ…λ¦½μ μœΌλ‘œ λ™μ‹œμ— 진행할 수 μžˆλ„λ‘ ν•œλ‹€. λ˜ν•œ, 각 λΈŒλžœμΉ˜κ°€ νŠΉμ • μž‘μ—…μ„ μ§„ν–‰ν•˜κ³ , ν•„μš”ν•œ 경우 ν•΄λ‹Ή μž‘μ—… λ‹¨μœ„μ˜ Rollback이 κ°€λŠ₯ν•˜κΈ°μ— ν”„λ‘œμ νŠΈ κ΄€λ¦¬μ˜ μœ μ—°μ„±μ„ ν–₯μƒμ‹œν‚¬ 수 μžˆλ‹€.

μ΄λŸ¬ν•œ μ „λž΅μ€ μ›ν•˜λŠ” 버전 λ‹¨μœ„λ‘œ 관리할 수 μžˆλ„λ‘ ν•˜μ—¬ ν”„λ‘œμ νŠΈμ˜ 관리와 배포의 μ•ˆμ •μ„±μ„ λ†’μ—¬μ€€λ‹€.
Branch μ „λž΅μ€ λ‹€μŒκ³Ό 같은 3가지가 μžˆλ‹€.
1️⃣ Git flow
2️⃣ Github Flow
3️⃣ Gitlab flow

 

 

1️⃣ Git flow

브랜치 μ’…λ₯˜

  1. master: μ œν’ˆ μΆœμ‹œ 버전을 κ΄€λ¦¬ν•˜λŠ” 메인 브랜치
  2. develop: λ‹€μŒ μΆœμ‹œ 버전을 μœ„ν•΄ κ°œλ°œν•˜λŠ” 브랜치
  3. feature: μƒˆλ‘œμš΄ κΈ°λŠ₯을 κ°œλ°œν•˜λŠ” 브랜치
  4. release: λ‹€μŒ μΆœμ‹œ 버전을 μ€€λΉ„ν•˜λŠ” 브랜치
  5. hotfix: μΆœμ‹œλœ μ œν’ˆμ˜ 버그λ₯Ό 고치기 μœ„ν•œ 브랜치

 

Git Flowλ₯Ό ν™œμš©ν•œ 개발 진행 흐름

  1. μ‹ κ·œ κΈ°λŠ₯ κ°œλ°œμ€ develop 브랜치λ₯Ό κΈ°μ€€μœΌλ‘œ ν•œ feature 브랜치λ₯Ό λ”°μ„œ μž‘μ—…
  2. μž‘μ—…μ΄ μ™„λ£Œλœ feature λΈŒλžœμΉ˜λŠ” develop 브랜치둜 병합.
    • PR을 톡해 리뷰 ν›„ λ³‘ν•©ν•˜λŠ” 방식
  3. 배포λ₯Ό μœ„ν•œ μ€€λΉ„λŠ” λ‹€μŒ μΆœμ‹œ 버전을 μœ„ν•΄ κ°œλ°œμ€‘μΈ develop λΈŒλžœμΉ˜μ—μ„œ release 브랜치λ₯Ό λ”°μ„œ ν•œλ‹€.
    • λ§Œμ•½, ν•΄λ‹Ή κ³Όμ •μ—μ„œ 버그가 λ°œκ²¬λœλ‹€λ©΄, release λΈŒλžœμΉ˜μ—μ„œ λ°”λ‘œ 반영
  4. ν…ŒμŠ€νŠΈ ν›„, 일정 주기둜 master 브랜치둜 λ³‘ν•©ν•˜μ—¬ μ œν’ˆ μΆœμ‹œ
  5. 배포 이후, release λΈŒλžœμΉ˜μ—μ„œ λ°œκ²¬λ˜μ§€ λͺ»ν•œ μƒˆλ‘œμš΄ λ²„κ·ΈλŠ” main λΈŒλžœμΉ˜μ—μ„œ hotfix 브랜치λ₯Ό 판 ν›„, hotfix λΈŒλžœμΉ˜μ—μ„œ λ°”λ‘œ 고친 ν›„ main으둜 병합
  6. hotfix λΈŒλžœμΉ˜μ—μ„œ 고치고, main λΈŒλžœμΉ˜μ— 병합 λ˜μ—ˆλ‹€λ©΄, 이λ₯Ό develop λΈŒλžœμΉ˜μ—λ„ 병합

 

νŠΉμ§•

  • release와 hotfix 브랜치λ₯Ό 톡해 λͺ…ν™•ν•œ 배포 절차λ₯Ό κ°–μΆ”κ³  μžˆλ‹€.
  • λ‹€μ–‘ν•œ μ’…λ₯˜μ˜ 브랜치λ₯Ό μ‚¬μš©ν•œλ‹€.
  • λ³΅μž‘ν•œ ν”„λ‘œμ νŠΈλ‚˜ λŒ€κ·œλͺ¨ νŒ€μ—μ„œ μ‚¬μš©ν•˜κΈ° μ ν•©ν•˜λ‹€.
  • λ³΅μž‘μ„±κ³Ό Control을 가지고 μžˆμ–΄ νŠΉμ • κΈ°λŠ₯μ΄λ‚˜ μˆ˜μ •μ„ λΉ λ₯΄κ²Œ 배포해야 ν•  경우 λ“±μ—μ„œ μœ μ—°μ„±μ΄ 떨어짐.

 

 

 

2️⃣ Github Flow

 

브랜치 μ’…λ₯˜

  • master : baseκ°€ λ˜λŠ” 브랜치
  • feature : master에 κΈ°λŠ₯을 μΆ”κ°€ν•˜κΈ° μœ„ν•œ μƒˆλ‘œμš΄ 브랜치

 

Github Flowλ₯Ό ν™œμš©ν•œ 개발 진행 흐름

  1. master λΈŒλžœμΉ˜λŠ” 배포λ₯Ό μœ„ν•œ μ†ŒμŠ€μ½”λ“œλ₯Ό κ΄€λ¦¬ν•˜λŠ” 브랜치.
  2. λ§Œμ•½, μ‹ κ·œ κΈ°λŠ₯ 개발이 ν•„μš”ν•˜λ‹€λ©΄, master λΈŒλžœμΉ˜λ‘œλΆ€ν„° feature 브랜치둜 μƒˆλ‘œ λ”°μ„œ μž‘μ—…μ„ μ§„ν–‰ν•œλ‹€.
  3. Taskκ°€ μ™„λ£Œλ˜λ©΄, Pull Requestλ₯Ό μƒμ„±ν•˜μ—¬ Reviewλ₯Ό μš”μ²­ν•˜κ³ , PR은 feature → master λΈŒλžœμΉ˜μ΄λ‹€.
  4. 리뷰 μ™„λ£Œ ν›„, ν”Όλ“œλ°±μ΄ λͺ¨λ‘ λ°˜μ˜λ˜μ—ˆλ‹€λ©΄, ν•΄λ‹Ή feature 브랜치λ₯Ό master 브랜치둜 λ³‘ν•©ν•œλ‹€.

 

νŠΉμ§•

  • λ‹¨μˆœν•˜λ©° 지속적인 배포λ₯Ό κ°•μ‘°ν•˜λ©°, master λΈŒλžœμΉ˜μ—μ„œ 배포λ₯Ό μˆ˜ν–‰ν•œλ‹€.
  • λ‹¨μˆœν•˜λ©° λΉ λ₯Έ 개발 및 배포λ₯Ό μœ„ν•΄ μ‚¬μš©λœλ‹€.
  • ν…ŒμŠ€νŠΈμ™€ 검증 절차λ₯Ό κ±°μΉ˜μ§€ μ•Šκ³  λ°”λ‘œ master λΈŒλžœμΉ˜λ‘œ Merge λ˜λ―€λ‘œ μœ„ν—˜μ„±μ΄ μžˆλ‹€.

 

 

 

3️⃣ Gitlab flow

λ³΅μž‘ν•œ Git Flow와 λ„ˆλ¬΄ κ°„λ‹¨ν•œ Github Flow의 μ ˆμΆ©μ•ˆ

 

 

브랜치 μ’…λ₯˜

  • master : μ•ˆμ •μ μΈ μ½”λ“œκ°€ μ €μž₯λ˜λŠ” 브랜치둜 baseκ°€ λ˜λŠ” 브랜치.
    • 전체적인 ν…ŒμŠ€νŠΈ 진행이 μ™„λ£Œλ˜μ–΄ κΈ°λŠ₯에 λŒ€ν•œ 보μž₯이 μžˆλ‹€λ©΄, production 브랜치둜 머지.
    • λ§Œμ•½ staging 단계가 ν•„μš”ν•˜λ‹€λ©΄, pre-production 브랜치둜 머지.
  • feature : 각 κΈ°λŠ₯이 κ°œλ°œλ˜λŠ” 브랜치.
    • master λΈŒλžœμΉ˜μ—μ„œ νŒŒμƒλ˜κ³  PR을 톡해 λ‹€μ‹œ λ³‘ν•©λœλ‹€.
  • Production : ν…ŒμŠ€νŠΈκ°€ λλ‚œ κΈ°λŠ₯의 배포λ₯Ό μœ„ν•œ 브랜치
  • Pre-Production : 배포 전에 μ œν’ˆμ„ ν…ŒμŠ€νŠΈ (QA, ν’ˆμ§ˆκ²€μ‚¬) ν•˜λŠ” 브랜치
    • ν…ŒμŠ€νŠΈκ°€ μ •μƒμ μœΌλ‘œ μ™„λ£Œλ˜λ©΄, production κ³Ό master 에 각각 PR(Pull Request)을 보낸닀.

 

Gitlab Flowλ₯Ό ν™œμš©ν•œ 개발 진행 흐름

  • κΈ°λŠ₯ 개발이 ν•„μš”ν•œ 경우, master λΈŒλžœμΉ˜μ—μ„œ feature 브랜치λ₯Ό μƒμ„±ν•œλ‹€.
  • feature λΈŒλžœμΉ˜μ—μ„œ κΈ°λŠ₯ 개발 μ™„λ£Œ ν›„, PR을 톡해
    • κΈ°λŠ₯에 λŒ€ν•œ 검증 및 보μž₯이 μžˆλ‹€λ©΄ production 브랜치둜 λ¨Έμ§€ν•œλ‹€.
    • κΈ°λŠ₯에 λŒ€ν•œ 검증 및 보μž₯이 ν•„μš”ν•˜λ‹€λ©΄, pre-production 브랜치둜 λ¨Έμ§€ν•œλ‹€.
  • pre-production λΈŒλžœμΉ˜μ—μ„œ ν…ŒμŠ€νŠΈκ°€ μ™„λ£Œ λ˜μ—ˆλ‹€λ©΄, productionκ³Ό master에 PR을 톡해 λ³‘ν•©ν•œλ‹€.

 

νŠΉμ§•

  • κ°„λ‹¨ν•˜κ³  직관적인 ν”Œλ‘œμš°λ₯Ό μ œκ³΅ν•˜μ—¬ 개발 ν”„λ‘œμ„ΈμŠ€λ₯Ό μ΄ν•΄ν•˜κΈ° μ‰½κ²Œ λ§Œλ“ λ‹€.
  • GitLab은 λ‚΄μž₯된 CI/CD νŒŒμ΄ν”„λΌμΈμ„ μ œκ³΅ν•˜λ―€λ‘œ λΉŒλ“œ, ν…ŒμŠ€νŠΈ, 배포 등을 μžλ™ν™”ν•  수 μžˆλ‹€.
    • 이λ₯Ό 톡해 μ•ˆμ •μ μΈ 배포와 λΉ λ₯Έ ν”Όλ“œλ°±μ„ 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 비ꡐ적 κ°„λ‹¨ν•œ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ œκ³΅ν•˜κΈ° λ•Œλ¬Έμ—, λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈμ—μ„œλŠ” ν˜‘μ—…κ³Ό 관리가 μ–΄λ €μšΈ 수 μžˆλ‹€.
  • 특히 지속적인 배포가 κ°•μ‘°λ˜λŠ” ν™˜κ²½μ—μ„œ νš¨κ³Όμ μ΄λ‹€.
728x90
λ°˜μ‘ν˜•

'πŸˆβ€β¬› git' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

git history μ‚­μ œν•˜κΈ°  (0) 2022.10.04
git merge μ—λŸ¬  (0) 2022.07.06