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 을 μ΄μš©ν•˜λ©΄ μ†ŒμŠ€νŒŒμΌμ„ νŽΈλ¦¬ν•˜κ²Œ 비ꡐ할 수 μžˆμŠ΅λ‹ˆλ‹€.

  1. SourceTree μ—μ„œ branch merge λ₯Ό μ‹œλ„ν•  λ•Œ, Conflict κ°€ λ°œμƒν•œ μ†ŒμŠ€νŒŒμΌμ„ μ„ νƒν•œ ν›„, Actions -> Resolve Conflict -> Launch External Merge Tool 을 μ„ νƒν•©λ‹ˆλ‹€.
  • Launch External Merge Tool
  1. FileMerge λΌλŠ” μ™ΈλΆ€ 툴이 μ‹€ν–‰λ˜λ©°, νŒŒμΌμ„ 비ꡐ할 수 μžˆμŠ΅λ‹ˆλ‹€. 파일 λΉ„κ΅μ°½μ˜ λ‚΄μš©μ„ κ°„λ‹¨νžˆ μ„€λͺ…ν•˜λ©΄ μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.
  • μ™Όμͺ½ μƒλ‹¨μ—λŠ” ν˜„μž¬ μž‘μ—… 쀑인 branch 의 μ†ŒμŠ€νŒŒμΌμ„ λ³΄μ—¬μ€λ‹ˆλ‹€.
  • 였λ₯Έμͺ½ μƒλ‹¨μ—λŠ” merge 둜 κ°€μ Έμ˜¬ branch 의 μ†ŒμŠ€νŒŒμΌμ„ λ³΄μ—¬μ€λ‹ˆλ‹€.
  • μ•„λž˜ μͺ½ 화면은 conflict λ₯Ό ν•΄μ†Œν•˜λ„λ‘ 두 μ†ŒμŠ€νŒŒμΌμ„ λ³‘ν•©ν•œ κ²°κ³Ό νŒŒμΌμ„ λ³΄μ—¬μ€λ‹ˆλ‹€.
  • 였λ₯Έμͺ½ μŠ€ν¬λ‘€λ°”μ—μ„œ κ°€λ‘œμ€„μ΄ κ·Έμ–΄μ§„ 뢀뢄이 병합할 μ½”λ“œκ°€ μœ„μΉ˜ν•œ κ³³μž…λ‹ˆλ‹€. νšŒμƒ‰μ€ λ‹¨μˆœ 병합이 κ°€λŠ₯ν•œ 곳이고, 빨간색은 좩돌이 λ°œμƒν•œ κ³³μž…λ‹ˆλ‹€.
  • FileMerge Example
  1. 파일 병합 μš”λ Ήμ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.
  • 병합 λŒ€μƒμ΄ λ˜λŠ” μ½”λ“œμ˜ λΈ”λŸ­μ΄ 상단 쒌우 사이에 μ„œλ‘œ μ—°κ²°λœ μ˜μ—­μ΄ μžˆμŠ΅λ‹ˆλ‹€. 이 κ°€μš΄λ° μ°½ 뢀뢄을 μ„ νƒν•˜λ©΄, κ·Έ μ˜μ—­μ΄ μ•½κ°„ ꡡ은 μ„ μœΌλ‘œ κ΅¬λΆ„λ©λ‹ˆλ‹€.
  • μƒλ‹¨μ˜ μ–‘μͺ½ μ°½ 사이에 ν™”μ‚΄ν‘œκ°€ ν‘œμ‹œλ˜λŠ”λ°, μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½μœΌλ‘œ κ·Έμ–΄μ§„ κ²½μš°μ—λŠ” μ™Όμͺ½μ˜ μ½”λ“œκ°€ 였λ₯Έμͺ½μ˜ λͺ¨μ–‘μœΌλ‘œ λ°”λ€” κ²ƒμ΄λΌλŠ” μ˜λ―Έμž…λ‹ˆλ‹€. 였λ₯Έμͺ½μ—μ„œ μ™Όμͺ½μœΌλ‘œ ν™”μ‚΄ν‘œκ°€ κ·Έμ–΄μ§„ κ²½μš°μ—λŠ” μ™Όμͺ½μ˜ λͺ¨μ–‘μœΌλ‘œ λ°”λ€” κ²ƒμ΄λΌλŠ” μ˜λ―Έμž…λ‹ˆλ‹€.
  • λ‹¨μˆœ 병합이 κ°€λŠ₯ν•œ 곳듀은 κΈ°λ³Έ 병합 κ²°κ³Όλ₯Ό κ·ΈλŒ€λ‘œ μ΄μš©ν•˜λ©΄ λ©λ‹ˆλ‹€. 창의 μ•„λž˜μͺ½ μ˜μ—­μ—μ„œ κ·Έ κ²°κ³Όλ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ‹¨μˆœ 병합이 κ°€λŠ₯ν•˜μ§€ μ•Šμ€ 곳은 λ³‘ν•©νˆ΄μ—μ„œ μ œμ‹œν•˜λŠ” 섀정값을 λ³€κ²½ν•˜μ—¬μ•Ό ν•©λ‹ˆλ‹€. 창의 였λ₯Έμͺ½ μ•„λž˜μ— λ³΄μ΄λŠ” Actions λΌλŠ” select box μ—μ„œ 섀정을 λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 각 섀정에 λŒ€ν•œ μžμ„Έν•œ μ„€λͺ…은 μƒλž΅ν•©λ‹ˆλ‹€.
  • κ°€λŠ₯ν•˜λ©΄ λ‹¨μˆœ 병합이 κ°€λŠ₯ν•˜λ„λ‘ μ½”λ“œλ₯Ό μˆ˜μ •ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. νŒŒμΌμ΄λ¦„_LOCAL_nnnnn.ν™•μž₯자 ν˜•μ‹μ˜ νŒŒμΌμ„ ν„°λ―Έλ„μ—μ„œ vim 으둜 μ—΄μ—¬, μΆ©λŒμ„ μ—†μ• λŠ” μͺ½μœΌλ‘œ μˆ˜μ •ν•œ ν›„, FileMerge ν”„λ‘œκ·Έλž¨μ˜ File -> Recompare Files λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.
  • 병합이 잘 마무리된 경우, File -> Save Merge ν›„ Quit ν•˜λ©΄, λ³‘ν•©λœ 결과파일이 SourceTree 에 남아 commit 을 ν•  수 μžˆλŠ” μƒνƒœκ°€ λ©λ‹ˆλ‹€.
  1. λ³‘ν•©νˆ΄λ‘œ 병합이 μ—¬μ˜μΉ˜ μ•Šμ€ 경우, μ†ŒμŠ€μ½”λ“œλ₯Ό 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 번호λ₯Ό 브랜치 이름에 μ‚¬μš©ν•œλ‹€.