August 30, 2021
νλ‘μ νΈλ 첫 μ μμ΄ μλ£λμμ λ μ’ λ£λλκ²μ΄ μλλΌ, μλ‘μ΄ μμμ΄λΌκ³ 보λκ²μ΄ λ§λκ² κ°λ€.
μλ‘μ΄ κΈ°λ₯μ΄ μΆκ°λκ³ , λ²κ·Έλ₯Ό μμ νκ³ , μ±λ₯ν₯μμ μν΄ λ³΄μμμ μ νλμ μμ λ§μ΄λ€.
νλμ νλ‘μ νΈμ μ¬λ¬ μ¬λμ΄ ν¨κ» μμ μ νλ€λ³΄λ©΄ κ°κ°μ μκ°κ³Ό μ΅κ΄ μ€νμΌλ€μ΄ μ½λμ 묻μ΄λκ² λλλ° κ·Έλ¬ν μ°¨μ΄λ₯Ό λμλ€κ³ νλκ²μ΄ μλλΌ νλμ 곡ν΅λ κ·μΉμ κ°κ³ , μ½λλ₯Ό 리뷰ν΄λ³Ό νμλ μλ€.
μ¬λ¬ λ³κ²½μ¬νμ νλμ νλ‘μ νΈμ λ³ν©νκ³ , μ΄μ μ½λλ€μ λν κΈ°λ‘μ λ¨κΈ°λ λ± κ°λ° νκ²½μ μμ΄ νμ
μ μν΄ ν° λμμ μ£Όλκ²μ΄ λ‘컬 μ μ₯μμ Git
μ격 μ μ₯μμΈ Github
μ΄λ€.
κΉ νλ‘μ°λ₯Ό κ²μνλ©΄ κ°μ₯ λ§μ΄ λμ€λ κ·Έλ¦Όμ΄ μλ€.
μ²μμ κ·Έλ¦Όμ 보μμ λμλ 무μμ μλ―Ένλμ§ μ΄ν΄κ° λμ§ μμμ§λ§, μ€μ λ‘ μ μ©ν΄λ³΄λ μ΄λμ λ κ°μ΄ μ‘νλκ² κ°μλ€.
μ€μ λ‘ λ°°ν¬λκ³ μλ μμ€κ° μ μ₯λμ΄μλ λΈλμΉ μ΄λ€.
μ€μ λ‘ λ°°ν¬λκ³ μλ μμ€κ° μλ, μλ‘μ΄ κΈ°λ₯λ€μ΄ μΆκ°λκ³ μλ λΈλμΉμ΄λ€.
λΆμμ νμ§λ§, κ°μ₯ μ΅μ μ μμ€λΌκ³ 보λκ²μ΄ λ§λκ² κ°λ€.
develop
λΈλμΉκ° μλ‘μ΄ κΈ°λ₯λ€μ΄ μΆκ°λκ³ μλ νλμ κ΅΅μ μμ€λΌκ³ 보μμ λ, κ·Έ μλ‘μ΄ κΈ°λ₯λ€μ΄ μ€μ λ‘ μμ± λλ λΈλμΉλΌκ³ 보면 λ κ² κ°λ€.
λ‘κ·ΈμΈκΈ°λ₯ κ°λ°, νμ κΈ°λ₯ κ°λ° λ±λ±
λ°°ν¬κ° λκ³ μλ master
λΈλμΉμ μμ€μμ κΈ΄κΈν λ²κ·Έκ° λ°μνμμ λ, κΈνκ² μμ μ νμ¬ λ°μνλ λΈλμΉ λΌκ³ νλ€.
μκ°ν΄λ³΄λ©΄, κ°μκΈ° λ°μν μλ¬λ₯Ό develop
μμ λ°μνλ€κ³ νλ©΄, λ€μ μ
λ°μ΄νΈκ° μμ λ κΉμ§ λ²κ·Έκ° μμ λμ§ λͺ»ν λΏλλ¬, λ°λ‘ μμ νλλΌλ μμ
μ€μΈ κΈ°λ₯λ€μ΄ μμ±λμ§ λͺ»ν μ±λ‘ λ¨μ μ μκΈ° λλ¬ΈμΈκ² κ°λ€.
develop
λΈλμΉλ‘ μλ‘κ² μ
λ°μ΄νΈ λλ μμ€λ€μ΄ λͺ¨λ μ 리λλ€λ©΄, ν
μ€νΈ λ±μ μ§ννλ λΈλμΉλΌκ³ νλ€.
κΈλ‘ κΈ°λ‘νκΈ° μ , μ€μ λ‘ λ°μμ ν΄λ³Έ κ²°κ³Όλ¬Όμ΄λ€. κ°λ¨ν μμ μ ν΅ν΄ κ³Όμ μ λ€λ€λ³΄λλ‘ νμ.
λͺ λ Ήμ΄ μμ£Όκ° μλ κ³Όμ μ μ€μ μΌλ‘ μμ보기μν΄ μμ€νΈλ¦¬λ₯Ό μ¬μ©νμλ€.
λ§μ½, κ°μΈ νλ‘μ νΈλΌλ©΄ κ°μΈ νλ‘μ νΈλ₯Ό μ°κ²°ν΄μ£Όκ³ , μ΄λ―Έ μμ±λμ΄μλ νλ‘μ νΈκ° μλ€λ©΄, fork
, clone
μ κ³Όμ μ κ±°μ³μ κ°μ Έμ€λλ‘ νλ€.
μ΄λ―Έ μ§νμ€μΈ νλ‘μ νΈλΌλ©΄ μ΄ μ²« κ³Όμ μ΄ μ§νλ μνμΌ μ λ μλ€.
μ§νμ€μΈ νλ‘μ νΈκ° μλλΌλ©΄ μ²μμλ master
λΈλμΉλ§ μ‘΄μ¬νλ μνμΌ κ²μ΄λ€.
μμ€νΈλ¦¬μ μ°μΈ‘ μλ¨μ μλ κΉ νλ‘μ°λ₯Ό λλ¬μ κΈ°λ³Έ λΈλμΉλ€μ μμ±ν΄μ£Όλλ‘ νμ.
μμΌλ‘ μμ±λλ λΈλμΉλ€μ κΈ°λ³Έ μ λμ΄λ₯Ό μ€μ ν΄μ€ μ μλ€.
λ±ν λ μμ ν νμ μμ΄ νμΈμ λλ¬μ£Όμ.
master
, develop
λΈλμΉκ° μμ±λ¨μ νμΈν΄ λ³Ό μ μλ€.
μ΄λ, master
λ μ격과 λ‘컬 λ λ€ μ‘΄μ¬νλ μνμ΄μ§λ§, develop
μ λ‘컬μλ§ μμ±λ κ²μ΄λ push
λ₯Ό ν΅ν΄ λμ μ격μλ λΈλμΉλ₯Ό μμ±ν΄μ£Όλλ‘ νμ.
νμ¬ λ°°ν¬λκ³ μλ μμ€μΈ matser
μ κ°λ°μ΄ μ΄λ€μ§κ³ μλ develop
λΈλμΉλ₯Ό λͺ¨λ λ‘컬μμ νμΈν μ μκ² λμλ€.
μμΌλ‘ μ°λ¦¬λ develop
λΈλμΉμμ νμν κΈ°λ₯λ€μ μΆκ°μ μΌλ‘ κ°λ°μ νκΈ° μν΄ feature
λΈλμΉλ₯Ό μμ±ν΄μΌ νλ€.
μκΉμ λ§μ°¬κ°μ§λ‘ μ°μΈ‘ μλ¨μ κΉ νλ‘μ°
λ²νΌμ λλ₯΄λ©΄ μ΄λ²μλ μμλλ λμμ μ μν΄μ£Όλ νμ
μ΄ νμ±ν λλ€.
μλ‘μ΄ κΈ°λ₯μ μΆκ°νκΈ° μν¨μ΄κΈ° λλ¬Έμ, μ κΈ°λ₯ μμ
μ λλ¬μ£Όκ³ μ ν©ν κΈ°λ₯λͺ
μ μλͺ
ν΄μ£Όλλ‘ νμ.
νμΈμ λλ₯΄λ©΄ feature
λΈλμΉμ μλͺ
ν μΈλΆ λΈλμΉκ° μμ±λκ²μ λ³Ό μ μλ€.
feature
λΈλμΉλ μ¬λ¬ κ°λ°μκ° ν¨κ» λΉμ·ν κΈ°λ₯μ κ°λ°νκΈ° μν΄ μ격μ μμ±λμ΄μμ μ λ μκ³ , λ‘컬μλ§ μμ±λ μ λ μλ€κ³ νλ€.
μλ‘μ΄ κΈ°λ₯μ μν μμ€μ½λλ₯Ό μμ±νκ³ , νμμ λ°λΌ ꡬλΆμ§μ΄ ν΄λΉ λ‘컬 λΈλμΉμ 컀λ°μ ν κ²μ΄λ€.
μλ‘μ΄ κΈ°λ₯ μΆκ° λ° μ»€λ°κΉμ§ μλ£κ° λμλ€λ©΄ ν΄λΉ λΈλμΉλ μν μ λ§λ¬΄λ¦¬νμκΈ° λλ¬Έμ μκΉμ κΉ νλ‘μ°
λ²νΌμ λλ¬ κΈ°λ₯ λ§λ¬΄λ¦¬λ₯Ό μμΌμ£Όλλ‘ νμ.
λ‘컬 develop
κ³Ό feature
μ λ³ν©ν΄μ£ΌκΈ° μ , λλ³΄λ€ λ¨Όμ μμ
μ΄ μλ£λ λ€λ₯Έ κ°λ°μλ€μ λ³κ²½μ¬νμ΄ λ°μλ μ격 develop
μ λ°μλμμ μ μκΈ° λλ¬Έμ, pull
μ μ¬μ©νμ¬ λ‘컬 develop
μ μ΅μ ν μμΌμ£Όκ³ λ³ν© νλλ‘ νμ.
μμμ λ§λ¬΄λ¦¬λ₯Ό μμΌμ£Όκ² λ κ²½μ°, λ‘컬μ develop
μ feature
λΈλμΉμ μμ
λ΄μ©λ€μ΄ λ³ν©λκ³ , ν΄λΉ λΈλ μΉλ μλμΌλ‘ μ κ±°κ° λλ€.
μμ§ λ‘컬μ develop
μλ§ λ³ν©μ΄ μ΄λ£¨μ΄μ‘κΈ° λλ¬Έμ, λμ μ격μμλ develop
μλ λ³ν©λ 컀λ°λ€μ λ°μμμΌμ€ νμκ° μλ€.
λμ μ격 develop
μ λ³κ²½μ¬νμ push
ν΄μ€λ€.
λμ μ격 develop
λΈλμΉμλ λ‘컬μμ μμ
ν μλ‘μ΄ κΈ°λ₯λ€μ΄ μΆκ°λ μνμ΄λ€.
λ°λΌμ μλμ κ°μ΄ λ³κ²½μ¬νμ λν΄ pull request
λ₯Ό μμ±ν μ μλ μλ¦Όμ΄ λ° κ²μ΄λ€.
κ°λ°ν κΈ°λ₯μ λν΄ κ°λ΅νκ² μ€λͺ
νλ κΈλ€μ μμ±νκ³ request
λ₯Ό 보λ΄λλ‘ νλ€.
νμ¬λ κ°μΈ νλ‘μ νΈλΌμ λ°λ‘ λμ μ격
master
λΈλμΉμ 보λ΄λλ‘ νμλ€.
μλ§, νμ μ νμ¬
clone
ν΄μ¨ μνλΌλ©΄ λμ μ격develop
μμ μλ³Έ μ격develop
μΌλ‘ μμ²μ 보λ΄λ ννμΌ κ²μ΄λ€.
μμ²ν request
λ μλμ κ°μ΄ νμΈμ ν μ μκ³ , μ μ ν μ½λ리뷰λ±μ ν΅ν΄ μ΅μ’
μΉμΈκΆνμκ° pull request
λ₯Ό μΉννκ² λ κ²μ΄λ€.
μ΅μ’
μ μΌλ‘ μΉμΈμ΄ λ request
λ₯Ό νμΈν μ μλ€.
λΈλμΉμ κΈ°λ‘λ μ§μ λΆν? λμ λ 컀λ°λ€μ μ 리νμ¬ λ³ν©νλ λλ
dev
-> master
λ μΌλ°λ¨Έμ§λ rebaseλ¨Έμ§κ° μ’λ€κ³ ν¨.
μ₯κΈ° μ μ§μ€μΈ λΈλμΉ κ° squashλ conflictκ° λ°μνλ€λκ² κ°μ.
λ§μ½ fork
λ₯Ό ν΅ν΄ λ£¨νΈ νλ‘μ νΈλ₯Ό κ°μ Έμμ κ°λ°μ νλ μν©μΌ κ²½μ°, λ΄ λ‘컬μ κ°λ° νκ²½μ μ΅μ μνλ‘ μ μ§ν νμκ° μλ€.
μ΄λ° μν©μ λ£¨νΈ νλ‘μ νΈλ₯Ό upstream
μ΄λΌκ³ λΆλ₯΄λ©° ν΄λΉ μ μ₯μλ₯Ό μ격 μ μ₯μμ μΆκ°λ₯Ό ν΄μ€ νμκ° μλ€.
λν, μ§νμ€μΈ feature
λΈλμΉμμ upstream
develop
μ μΆκ°λ κΈ°λ₯μ΄ νμνλ€λ©΄ pull
ν΄μ μ¬μ©νμ
upstream
μ΄λΌκ³ νλ€ ν¨upstream
μμ κ°μ Έμ€κΈ° μ§ν
upstream repository
μ μμ±λμ΄μλ λΈλμΉλ€λ νμμ λͺ¨λ νμλλ, νμ¬ λΈλμΉμ λ§λ upstream
λΈλμΉμμ pull
ν΄μΌν¨upstream
μμ κ°μ Έμ€λ €λ μ€, μμ
ν΄λμ μ½λλ€μ΄ μ»€λ° λκΈ°μ€μΈ μνλΌλ©΄ μμ
ν΄λμ μ½λλ€μ stash
μ μ μ₯ν΄λμ λ€μ upstream
μμ pull
νλ€.
push
λ μ λ γ΄γ΄pull
νμ¬ μΆκ°λ 컀λ°μ€ μΆ©λλλ λΆλΆμ΄ μλ€λ©΄ ν΄κ²°μ΄ νμν λΆλΆμ΄λΌκ³ 보μ¬μ€stash
μ μ μ₯ν΄λμ μ½λλ₯Ό λ€μ νμ¬ λΈλμΉλ‘ κ°μ Έμ€κ³ , μΆ©λ νμΌμ μ§μ ν©μΉκΈ°
pull
ν λΈλμΉμμ μ
λ°μ΄νΈλ λ΄μ©μ΄ μλ€λ©΄ μΆ©λμ΄ λ°μν ν
λ°(λλΆλΆ μκΈ°λ λ―), μ λ³ν©ν΄μ£Όλ©΄ ν° λ¬Έμ μμbranch
λ₯Ό origin branch
μΌλ‘ push
νλ€μ, μ΅μ’
μ μΌλ‘ λ³ν©λμ΄μΌ ν λΈλμΉμ pull request
λ₯Ό μμ±νμ¬ μ λ¬ν¨.
pull request
λ₯Ό μμ±ν λ, upstream
μ λΈλμΉ, μμ μ λΈλμΉ λ± λͺ¨λ λΈλμΉλ₯Ό μ νν μ μμbranch
λ‘λ μ λ¬ x, λμ λΈλμΉλ μ°¨μ΄κ° μμ κ²½μ°μλ λ³νκ° pull request
κ° μμ±λμ§ μλλ€.git merge branchname
νμ¬ λΈλμΉμ μ΄νμ κΈ°μ¬λ λΈλμΉμ λ³κ²½λ 컀λ°λ΄μ©λ€μ νλλ‘ λ¬Άμ΄μ λ³ν©νλ€.
μ΄ λ, μ΄νμ λΈλμΉμ fast-forward
μ κ΄κ³λΌλ©΄ κ·Έλ₯ λ°λΌκ°λ νμμΌλ‘ λλ±ν μμΉμ μκ²λμ΄ λ³ν©λμλ€λ 컀λ°λ©μμ§λ₯Ό λ¨κΈΈ μ μκΈ° λλ¬Έμ(μλ‘μ΄ μ»€λ°μΆκ°κ° μλλΌ κ·Έλ₯ λ°λΌκ°λ λλ) λλΆλΆ μλμ μΌλ‘ git merge --no-ff branchname
λ₯Ό ν΅ν΄ νλ¨κ³ μΆκ°λ 컀λ°μ λ¨κΈ°λ νΈ μ΄λΌκ³ νλ€.
λ³λ€λ₯Έ 컀λ°μ΄ μΆκ°λ νμ μμ΄ μ΄ν 컀λ°μ μμΉμ λλ±νκ² μ΄λν μ μλ μνλ₯Ό μλ―Ένλκ² κ°λ€.
λμ²΄λ‘ λ³ν©κ³Ό κ°μ μμ
μ μννμμ λ μλ μΌμΈλ°, λ³ν©μ νμλ€λ μ»€λ° λ©μμ§λ₯Ό λ¨κΈ°κΈ° μν΄ --no-ff
λ₯Ό ν΅ν΄ fast-forward
μμ
μ΄ μλ 컀λ°μ λ¨κΈΈ μ μλλ‘ νλ€λκ² κ°λ€.
git rebase branchname
νμ¬ λΈλμΉμ μμλ λ³κ²½λ 컀λ°λ΄μ©λ€μ μ΄νμ κΈ°μ¬λ λΈλμΉμ μ»€λ° λ³κ²½μ¬νλ€ λ€μ μ΄μ΄λΆμΈλ€.
λ§μΉ μ΄νμ κΈ°μ¬λ λΈλμΉμμλ§ μμ μ ν κ² μ²λΌ 보μ¬μ§λ€.
μμ§ν μμ§κΉμ§ νμλ₯Ό μ λͺ¨λ₯΄κ² λ€.
λ³κ²½λ λͺ¨λ μμ
μ΄ λ°μλ develop
λΈλμΉλ₯Ό κΈ°μ€μΌλ‘ release
λΈλμΉλ₯Ό checkout
νλ€.
μ΄λ λ°μνλ λ²κ·Έλ€μ release
λΈλμΉμ λ°λ‘ λ°μνκ³ , λ§μ°¬κ°μ§λ‘ develop
λΈλμΉμλ merge
ν΄μ€λ€.
;`git checkout devlop` || ;`git checkout release`
;`git merge --no-ff release/fixes`
release
λΈλμΉμ μμ
μ΄ μλ£λλ©΄ master
λΈλμΉμμ merge
ν΄κ°λ€.
;`git checkout master`
;`git merge --no-ff release`
λ°°ν¬μ© release
κ° λ³ν©λ master
λΈλμΉμ ν΄λΉ release
μ λ²νΈμΈ tag
λ₯Ό λ¬μμ£Όλλ‘ νλ€.
λ§μ½, λ°°ν¬λ μνμ κΈ΄κΈν λ²κ·Έκ° λ°μνλ€λ©΄, master
λΈλμΉμμ λ°λ‘ hotfixes
λΌλ λΈλμΉλ₯Ό λ°μ μμ
μ νκ³ , master
λΈλμΉμ μ§μ λ³ν©νκ³ μμλ₯Ό μΆκ°νμ¬ νκ·Έλͺ
μ μ
λ°μ΄νΈνλ€
1.1, 1.2 β¦
λΉμ°ν hotfixes
λΈλμΉλ κ°λ°μ€μΈ develop
λΈλμΉμλ λ³ν©λλ€.
κ°μΈ νλ‘μ νΈλ₯Ό κ°μ§κ³ μ§ννμκΈ° λλ¬Έμ μ€κ°μ€κ° μ ννμ§ μμ λΆλΆμ΄ μμ μ μλ€.
νΉν
pull request
λ¨κ³μ κ²½μ°, μΈλΆ λΈλ‘κ·Έμ κΈμ΄λ λ€λ₯Έ λ°©μμΌλ‘ ν μ€νΈν΄λ³Έκ±Έ κΈ°λ°μΌλ‘ μμ±λμλ€.
μ΄λ¬ν κ³Όμ μ ν΅ν΄ μ΅λν μλ³Έμ μμ€μ½λμ μ§μ μ μΈ μμ μ΄ λ°λ‘λ°λ‘ μ΄λ€μ§λκ²μ λ§μμ μ΅λν μμ νκ² μμ μ μ§ννκ³ μ νλ λλμ΄ λ€μλ€.
λν, μ΅μ’ μμ€μ½λμ λ³ν©νκΈ° μ κΈ°μ‘΄μ κ·μ²μ΄λ, μ ν©νμ§ μμ λ°©μμΌλ‘ μμ±λ μ½λλ₯Ό 리뷰νμ¬ μ¬μ μ μμ κ³Όμ μ κ±°μΉ μ μλ€λ μ λν ν° μ΄μ μΈκ² κ°λ€.
μλ²½ν λμΌν νκ²½μμ ν΄λ³΄μ§ λͺ»νμ μ μμ½μ§λ§, νλ¦μ λν μ΄ν΄μλ ν° λμμ΄ λ κ² κ°λ€.