Git Branching Model - aragorn/home GitHub Wiki
κΈ°λ³Έ μ μ±
μΌλ°μ μΈ Git Branching Model λ‘ μ¬μ©λλ gitflow λ₯Ό μ°¨μ©νλ€.
- gitflow λͺ¨λΈμ λν΄μλ λ€μμ μΈλΆ μλ£λ₯Ό μ°Έκ³ νλ©΄ λλ€.
- gitflow λ₯Ό κ°λ¨ν μμ½νλ©΄, λ€μκ³Ό κ°μ workflow λ₯Ό κ°λλ€.
develop
branch: κ°λ° λ²μ μ κΈ°λ₯λ€μ νλλ‘ λ¬Άμ λΈλμΉμ΄λ€.feature/*
branch: κ°λ°μ μ£Όλ‘ κΈ°λ₯ λ¨μλ‘ feature namespace μλμ λΈλμΉλ₯Ό μμ±νμ¬ μ§ννλ€. ν΄λΉ κ°λ°μ΄ μλ£λλ©΄, ν΅ν© ν μ€νΈλ₯Ό μν΄ develop μ merge νλ€.release/*
branch: μννΈμ¨μ΄λ₯Ό 릴리μ¦, λ°°ν¬νκΈ° μν ν΅ν© ν μ€νΈ, QA ν μ€νΈμ© λΈλμΉμ΄λ€. develop branch μ μ΄λ μ§μ μ release namespace μλμ λΈλμΉλ‘ κ°λ₯Έλ€. ν μ€νΈ κ³Όμ μ μ€λ₯ μμ μ΄ μλ£λλ©΄, λ¦΄λ¦¬μ¦ λΈλμΉλ₯Ό μ’ λ£νκ² λλ©°, μ’ λ£λ λ¦΄λ¦¬μ¦ λΈλμΉλ master μ merge λλ€. release branch μμ μΆκ°μ μΌλ‘ μμ λ commit μ΄ μλ€λ©΄, release finish κ³Όμ μμ μ΄ commit μ develop μΌλ‘ merge λλ€.- <!> ꡬ맀νκΈ° κ°λ° κ³Όμ μμλ release branch λ₯Ό μ€μ§μ μΌλ‘ μ¬μ©νμ§ μκ³ μλ€. develop branch κ° release branch λ₯Ό λ체νλ€. κ·Έλ¬λ SourceTree http://www.sourcetreeapp.com/ μ κ°μ λꡬμ gitflow κ΄λ¦¬ κΈ°λ₯μ κ·Έλλ‘ μ¬μ©νκΈ° μν΄ release branch λ₯Ό μμ±νλ κ³Όμ μ μ μ©νλ€.
master
branch: 릴리μ¦λ₯Ό μν μμ λ λ²μ μ λΈλμΉμ΄λ€.hotfix/*
branch: μ΄λ―Έ 릴리μ¦λ μννΈμ¨μ΄μ μ€λ₯ μμ μ μν΄ μ¬μ©νλ λΈλμΉμ΄λ€. hotfix branch μ μμ μ μλ£νλ©΄, master, develop λͺ¨λμ merge λλ€.
μΉ΄μΉ΄μ€ κ°λ°/ν μ€νΈ νκ²½μ λ§μΆμ΄ alpha, sandbox, beta stage μ λμνλ branch λ₯Ό μ¬μ©νλ€.
- alpha, sandbox, beta stage μ μ©λκ° κ°λ°λ²μ ν
μ€νΈ, QA ν
μ€νΈ λ± κ°λ° νλ‘μΈμ€ λ¨κ³ λλ λ¦΄λ¦¬μ¦ νλ‘μΈμ€μ λ°λ₯Έ λ¨κ³μ μΌμΉνμ§ μλλ€.
- alpha, sandbox μ λΆλ¦¬λ μΉ΄μΉ΄μ€ν‘ κ³μ , μΉ΄μΉ΄μ€κ³μ μμ€ν μ κ°κ³ μμΌλ©°, μ°κ³λ μ¬λ΄ API λ λͺ¨λ λΆλ¦¬λμ΄ μλ€.
- μ λ¬ΌνκΈ°, νν ν¬ λ± κ΄λ ¨ νμ κΈ°λ₯ ν μ€νΈλ₯Ό μν΄ alpha, sandbox, beta stage μ ꡬ맀νκΈ°λ₯Ό μ 곡ν΄μΌ νλ λλ μ’ μ’ λ°μνλ€.
- develop branch μΈμ alpha, sandbox branch λ₯Ό λκ³ , κ°κ° alpha stage, sandbox stage μ ꡬ맀νκΈ°μ λ°°ν¬νλ€.
- alpha, sandbox μ λ°°ν¬νκΈ°λ₯Ό μνλ κΈ°λ₯μ΄ μμΌλ©΄, λ°°ν¬μλ²μ λΈλμΉλ₯Ό λ³κ²½νμ§ μκ³ , alpha, sandbox λΈλμΉμ ν΄λΉ κΈ°λ₯μ merge ν ν, alpha, sandbox λΈλμΉλ₯Ό λ°°ν¬νλ€.
- beta stage λ νμμ λ°λΌ λ°°ν¬ν λΈλμΉλ₯Ό μ ννμ¬ λ°°ν¬νλ κΈ°μ‘΄ λ°©μμ μ μ§νλ€.
- hotfix, master, develop λΈλμΉλ₯Ό νμμ λ°λΌ μ νν ν λ°°ν¬νλ κ²μ΄ κΈ°μ‘΄ λ°©μμ΄λ€.
develop, release, master μ release workflow λ gitflow λ₯Ό μ μ§νλ€.
- alpha, sandbox branch λ ν΄λΉνλ ν μ€νΈ stage μμμ λ°°ν¬λ₯Ό μν΄ μ¬μ©νλ€.
- develop - release - master branch λ₯Ό μ¬μ©νλ gitflow κΈ°λ°μ release workflow λ gitflow λ₯Ό κ·Έλλ‘ μ μ§νλ€.
- beta stage λ λ³΄ν΅ develop branch λ₯Ό λ°°ν¬νλ€.
- νμμ λ°λΌ hotfix branch λλ λ€λ₯Έ λΈλμΉλ₯Ό λ°°ν¬ν μ μλ€.
- production μλ μμΈ μν©μ΄ μλλ©΄, master branch λ₯Ό λ°°ν¬νλ€.
- rollback μ΄ νμν μμΈ μν©μ κ²½μ°, master branch κ° μλ branch, tag λ₯Ό λ°°ν¬ν μ μλ€.
μ£Όμμ¬νκ³Ό FAQ
sandbox, alpha λΈλμΉμ μ§μ commit ν μ½λλ develop μΌλ‘ λμ΄κ°μ§ μμ΅λλ€.
- μ½λλ₯Ό μμ , 컀λ°νλ λΈλμΉλ λ³΄ν΅ feature, hotfix μ λΈλμΉμ λλ€.
- sandbox, alpha λΈλμΉλ ν μ€νΈ νκ²½μ μμ μ€μΈ μ½λλ₯Ό λ°°ν¬νκΈ° μν μμμ μΈ λ³ν©μ© λΈλμΉμ λλ€. sandbox, alpha λΈλμΉμμ μμ λ μ¬νμ release workflow μ λ°λΌ develop μΌλ‘ merge λλ κ²½λ‘κ° μμ΅λλ€. λ°λΌμ λͺ¨λ μμ μ¬νμ κ²°κ΅ λ¬΄μλκ² λ©λλ€.
- sandbox, alpha λΈλμΉμλ λ°°ν¬λλ©΄ κ³€λν λΆμμ ν μ½λκ° mege λμ΄ μμ μ μμ΅λλ€. QA ν μ€νΈλ₯Ό κ±°μ³€λ€ νλλΌλ, 물리 DB λͺ¨λΈ μμ λ±μ μ΄μκ° μκΈ°μ, sandbox, alpha λΈλμΉμ μ½λκ° κ³§λ°λ‘ develop, master λ‘ λ°°ν¬λ κ²½μ°, μ€λ₯λ μ₯μ κ° λ°μν μ μμ΅λλ€. κ°λ³ feature λΈλμΉμ κ°λ°μμ μμνμ¬ μ΄λ feature λΈλμΉκ° develop, master λ‘ λ¦΄λ¦¬μ¦λμ΄λ λλμ§ νμΈνκ³ , feature λ₯Ό 'μλ£'(finish) νμ¬ release workflow λ₯Ό λ°λ₯΄λ κ²μ΄ μ’μ΅λλ€.
- κ°λ¨ν μμ½νλ©΄, feature λΈλμΉκ° sandbox, alpha λΈλμΉλ‘ merge λλ μΌμ κ°λ° λμ€ μμ°μ€λ¬μ΄ μΌμ λλ€. κ·Έλ¬λ, sandbox λΈλμΉλ₯Ό feature λ develop μΌλ‘ merge νλ κ²½μ°λ λ°μνμ§ μλ κ²μ΄ μ’μ΅λλ€.
branch λ₯Ό mergeν λ conflict κ° λ°μν©λλ€. μ΄λ»κ² ν΄κ²°νλ κ²μ΄ μ’μκΉμ?
branch merge κ³Όμ μμ conflict κ° λ°μν κ²½μ°, λ€μκ³Ό κ°μ μΆ©λ ν΄μ λ°©λ²μ΄ μμ΅λλ€.
Aμ ν: feature X λΈλμΉμμ develop λΈλμΉλ₯Ό merge νλ λμ€, μΆ©λμ΄ λ°μν κ²½μ°
- νμ¬ branch κ° feature λΈλμΉμΈ κ²½μ°μ λλ€. merge μ€μΈ working copy μμ μΆ©λμ ν΄μν ν, commit, push νμ¬ λ¬Έμ λ₯Ό ν΄κ²°ν μ½λκ° feature μ λ°μλ©λλ€.
- μ΄ν ν΄λΉ feature λ₯Ό finish νκ² λλ©΄, μΆ©λμ΄ λ°μνμ§ μκ² λ©λλ€.
Bμ ν: feature Y λΈλμΉλ₯Ό finish νμ¬ develop μΌλ‘ mergeνλ λμ€, μΆ©λμ΄ λ°μν κ²½μ°
- feature κ°λ° κΈ°κ° μ€μ, develop λΈλμΉμ λ€λ₯Έ μμ μ¬νμ΄ commit λμ΄ μΆ©λμ΄ λ°μνλ κ²μ λλ€. merge κ΄μ μμ λ³Έλ€λ©΄, develop μμ feature Y λ₯Ό merge νλ λμ€ μΆ©λμ΄ λ°μνλ κ²μ λλ€.
- μ΄λ κ² μΆ©λμ΄ λ°μνλ©΄, λ¨Όμ νμ¬ local PC μ μμ μ€μΈ feature λΈλμΉ, develop λΈλμΉλ₯Ό λͺ¨λ reset νκ±°λ delete ν©λλ€. reset μ΄ κΉ¨λνκ² μ 리λμ§ μμΌλ©΄ μλͺ»λ merge λ‘ μ‘°μ©ν μ½λκ° μ μ€λλ κ²½μ°κ° μκΈ°μ μ‘°μ¬ν΄μΌ ν©λλ€. SourceTree μμ reset νλ κ²½μ°, κΉ¨λνκ² reset λμ§ μλ κ²½μ°κ° κ°λ λ°μνλ κ²μΌλ‘ 보μ΄λ, κ°λ₯νλ©΄ μμ μ€μ΄λ local branch λ₯Ό delete νλ κ²μ΄ μ’μ΅λλ€.
- origin μμ feature branch, develop branch λ₯Ό λ€μ pull ν©λλ€. μ΄ μνλ feature λΈλμΉλ₯Ό finish νκΈ° μ§μ μ μνμ λμΌν©λλ€.
- μ΄μ develop λΈλμΉλ₯Ό feature λΈλμΉλ‘ merge νλ Aμ ν νλ‘μΈμ€λ₯Ό μ§νν©λλ€. μ΄λ μΆ©λμ ν΄μν ν, λ€μ feature finish λ₯Ό μλνλ©΄, μΆ©λ μμ΄ merge λ©λλ€.
- κ·Έλ¬λ code μ μΆ©λμ΄ μλ€κ³ νμ¬λ, semantic error λλ logical error κ° λ°μν μ μμΌλ―λ‘, feature λ₯Ό finish νκΈ° μ μ μ μ ν ν μ€νΈλ₯Ό μ§ννλ κ²μ΄ μ’μ΅λλ€.
Cμ ν: feature Xμ feature Yκ° κ°μ κ°λ°μ μ§νλλ λμ€, alpha λ sandbox λΈλμΉμ merge νλ©΄μ μΆ©λμ΄ λ°μν κ²½μ°
- Bμ νκ³Ό μΆ©λ μν©μ μ μ¬νμ§λ§, μ‘°κΈ λ€λ₯΄κ² μ κ·Όν΄μΌ ν©λλ€. Bμ ν μΆ©λμμλ Aμ νμΌλ‘ μ νν ν, μΆ©λμ ν΄μν΄μΌ ν©λλ€. κ·Έλ¬λ μ΄ κ²½μ°λ alpha, sandbox λΈλμΉμ μΆ©λνλ κ²μ΄κ³ , alpha, sandbox λΈλμΉλ feature λ€μ integration test λ₯Ό μν΄ μ¬μ©νλ μμμ μΈ λΈλμΉμ λλ€. alpha, sandbox λΈλμΉλ₯Ό feature λ‘ merge νλ κ²μ λΆνμν κ°λ°/ν μ€νΈμ© μ½λκ° feature μ μ μ λκΈ° λλ¬Έμ μ λΉνμ§ μμ΅λλ€. λ°λΌμ Aμ νκ³Ό λΉμ·νκ² λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€.
- μ΄ κ²½μ°μλ μλ Dμ ν λλ Eμ νμ ν΄κ²° λ°©λ²μ μ μ©νλ κ²μ΄ μ’μ΅λλ€.
Dμ ν: λ¨Όμ 릴리μ¦ν feature Xμ λμ€μ 릴리μ¦ν feature Yλ₯Ό κ°μ κ°λ°νλ λμ€, alpha λ sandbox λΈλμΉμ merge νλ©΄μ μΆ©λμ΄ λ°μν κ²½μ°
- feature X λ₯Ό λ¨Όμ 릴리μ¦ν κ²μ΄κ³ , κ±°μ κ°λ°μ μλ£ν κ²½μ°λΌλ©΄, feature Y μμ feature X λ₯Ό merge νλ©°, μΆ©λμ ν΄μν©λλ€. conflict λ₯Ό μμ ν μ½λλ feature Y μ commit λ©λλ€.
- feature X λ₯Ό λ¨Όμ finish νμ¬ develop μΌλ‘ merge ν κ²μ΄κ³ , μ΄ν feature Y λ₯Ό finish ν λ, μΆ©λμ΄ ν΄μλ μνλ‘ μλ merge λ κ²μ λλ€.
Eμ ν: μ΄λ κ²μ΄ λ¨Όμ 릴리μ¦λ κ²μΈμ§ μ μ μλ feature X, feature Y κ° κ°μ κ°λ°μ μ§ννλ λμ€, alpha λ sandbox λΈλμΉμ merge νλ©΄μ μΆ©λμ΄ λ°μν κ²½μ°
- Dμ νμΌλ‘ μΉννμ¬ μ²λ¦¬ν μ μλ€λ©΄, feature X, feature Y λ₯Ό κ°μ μ μμ commit νμ¬, merge κ³Όμ μμ μΆ©λμ΄ λ°μνμ§ μλλ‘ λ§λλλ€. 보ν΅μ Aμ νμ΄λ Dμ νμΌλ‘ λ¬Έμ λ₯Ό μ ννμ¬ ν΄κ²°νμκ³ , λ³ν© ν μ€νΈμ© local branch λ₯Ό λ§λ ν, conflict λ₯Ό ν΄κ²°νκ³ , cherry pick commit μ λ§λλ λ°©λ² λ±μ΄ μμ κ² κ°μλ°.. μ€μ λ‘ μλν΄ λ³΄μ§λ λͺ»νμ΅λλ€.
conflict λ₯Ό ν΄κ²°ν λ, λ μμ€νμΌμ λΉκ΅ν λ λ무 ν·κ°λ €μ.
SourceTree μ ν¨κ» λ°°ν¬λλ External Merge Tool μ μ΄μ©νλ©΄ μμ€νμΌμ νΈλ¦¬νκ² λΉκ΅ν μ μμ΅λλ€.
- SourceTree μμ branch merge λ₯Ό μλν λ, Conflict κ° λ°μν μμ€νμΌμ μ νν ν, Actions -> Resolve Conflict -> Launch External Merge Tool μ μ νν©λλ€.
- FileMerge λΌλ μΈλΆ ν΄μ΄ μ€νλλ©°, νμΌμ λΉκ΅ν μ μμ΅λλ€. νμΌ λΉκ΅μ°½μ λ΄μ©μ κ°λ¨ν μ€λͺ νλ©΄ μλμ κ°μ΅λλ€.
- μΌμͺ½ μλ¨μλ νμ¬ μμ μ€μΈ branch μ μμ€νμΌμ 보μ¬μ€λλ€.
- μ€λ₯Έμͺ½ μλ¨μλ merge λ‘ κ°μ Έμ¬ branch μ μμ€νμΌμ 보μ¬μ€λλ€.
- μλ μͺ½ νλ©΄μ conflict λ₯Ό ν΄μνλλ‘ λ μμ€νμΌμ λ³ν©ν κ²°κ³Ό νμΌμ 보μ¬μ€λλ€.
- μ€λ₯Έμͺ½ μ€ν¬λ‘€λ°μμ κ°λ‘μ€μ΄ κ·Έμ΄μ§ λΆλΆμ΄ λ³ν©ν μ½λκ° μμΉν κ³³μ λλ€. νμμ λ¨μ λ³ν©μ΄ κ°λ₯ν κ³³μ΄κ³ , λΉ¨κ°μμ μΆ©λμ΄ λ°μν κ³³μ λλ€.
- νμΌ λ³ν© μλ Ήμ λ€μκ³Ό κ°μ΅λλ€.
- λ³ν© λμμ΄ λλ μ½λμ λΈλμ΄ μλ¨ μ’μ° μ¬μ΄μ μλ‘ μ°κ²°λ μμμ΄ μμ΅λλ€. μ΄ κ°μ΄λ° μ°½ λΆλΆμ μ ννλ©΄, κ·Έ μμμ΄ μ½κ° κ΅΅μ μ μΌλ‘ ꡬλΆλ©λλ€.
- μλ¨μ μμͺ½ μ°½ μ¬μ΄μ νμ΄νκ° νμλλλ°, μΌμͺ½μμ μ€λ₯Έμͺ½μΌλ‘ κ·Έμ΄μ§ κ²½μ°μλ μΌμͺ½μ μ½λκ° μ€λ₯Έμͺ½μ λͺ¨μμΌλ‘ λ°λ κ²μ΄λΌλ μλ―Έμ λλ€. μ€λ₯Έμͺ½μμ μΌμͺ½μΌλ‘ νμ΄νκ° κ·Έμ΄μ§ κ²½μ°μλ μΌμͺ½μ λͺ¨μμΌλ‘ λ°λ κ²μ΄λΌλ μλ―Έμ λλ€.
- λ¨μ λ³ν©μ΄ κ°λ₯ν κ³³λ€μ κΈ°λ³Έ λ³ν© κ²°κ³Όλ₯Ό κ·Έλλ‘ μ΄μ©νλ©΄ λ©λλ€. μ°½μ μλμͺ½ μμμμ κ·Έ κ²°κ³Όλ₯Ό νμΈν μ μμ΅λλ€.
- λ¨μ λ³ν©μ΄ κ°λ₯νμ§ μμ κ³³μ λ³ν©ν΄μμ μ μνλ μ€μ κ°μ λ³κ²½νμ¬μΌ ν©λλ€. μ°½μ μ€λ₯Έμͺ½ μλμ 보μ΄λ Actions λΌλ select box μμ μ€μ μ λ³κ²½ν μ μμ΅λλ€. κ° μ€μ μ λν μμΈν μ€λͺ μ μλ΅ν©λλ€.
- κ°λ₯νλ©΄ λ¨μ λ³ν©μ΄ κ°λ₯νλλ‘ μ½λλ₯Ό μμ νλ κ²μ΄ μ’μ΅λλ€. νμΌμ΄λ¦_LOCAL_nnnnn.νμ₯μ νμμ νμΌμ ν°λ―Έλμμ vim μΌλ‘ μ΄μ¬, μΆ©λμ μμ λ μͺ½μΌλ‘ μμ ν ν, FileMerge νλ‘κ·Έλ¨μ File -> Recompare Files λ₯Ό μ€νν©λλ€.
- λ³ν©μ΄ μ λ§λ¬΄λ¦¬λ κ²½μ°, File -> Save Merge ν Quit νλ©΄, λ³ν©λ κ²°κ³ΌνμΌμ΄ SourceTree μ λ¨μ commit μ ν μ μλ μνκ° λ©λλ€.
- λ³ν©ν΄λ‘ λ³ν©μ΄ μ¬μμΉ μμ κ²½μ°, μμ€μ½λλ₯Ό IntelliJ λ± IDE μμ μμ νμ¬ μλνλλ‘ λ§λ€μ΄μΌ ν©λλ€.
sandbox, alpha λΈλμΉλ₯Ό λ°λ‘ κ΄λ¦¬νλ μ₯μ μ΄ λ¬΄μμΈκ°μ?
- μ¬λ¬ κ°λ°μκ° μλ‘ λ€λ₯Έ λ¦΄λ¦¬μ¦ μΌμ μΌλ‘ κ°λ° μμ μ μ§νν λ, feature λΈλμΉλ₯Ό κ°λ₯νλ©΄ μμ£Ό merge νμ¬ μ½λ ν μ€νΈ, QA ν μ€νΈλ₯Ό μ§ννκ³ μ ν©λλ€. μ΄λ μ½λμ μΆ©λμ΄ μλμ§ μμ£Ό λ¨Έμ§νκ³ ν μ€νΈ μ€ν μ΄μ§μ λ°°ν¬νμ¬ ν μ€νΈνκΈ° μν΄ μ¬μ©νλ λΈλμΉκ° sandbox, alpha λΈλμΉμ λλ€.
- μλ‘ λ 립μ μΌλ‘ κ°λ°νλ feature λ₯Ό ν μ€νΈ μ€ν μ΄μ§μμ ν΅ν© ν μ€νΈλ₯Ό μνν μννλ κ²μ΄ sandbox, alpha λΈλμΉλ₯Ό κ΄λ¦¬νλ μ©λμ λλ€. νλ§λλ‘ νννλ©΄, Continuous Integration μ branch μ΄λ©°, alpha, sandbox μμ feature branch λ€μ λ³ν©νλ κ³Όμ μ΄ Continuous Integration κ·Έ μ체μ λλ€.
ꡬ맀νκΈ° κ°λ° κ΄λ‘
feature branch μ μ΄λ¦μ JIRA issue λ²νΈλ₯Ό μ’ μ’ μ¬μ©νλ€.
feature branch μ ꡬν λ΄μ©μ΄ 무μμΈμ§ νμΈνκΈ° νΈλ¦¬νκ² JIRA issue λ²νΈλ₯Ό λΈλμΉ μ΄λ¦μ μ¬μ©νλ€.