h e 1 1 o !
κΉν μ΄μ, λ§μΌμ€ν€, κΉνλ‘μ° λ³Έλ¬Έ
π μ΄μμ λ§μΌμ€ν€
μ΄μλ λ§ κ·Έλλ‘ μ²λ¦¬ν΄μΌνλ μΌλ€.
곡ν΅μ μ±κ²©μ κ°μ§ μ΄μλ€μ νλμ λͺ©ν, λ¬μ± κΈ°μ€μ μΌλ‘ λ¬Άμ κ²μ λ§μΌμ€ν€μ΄λΌκ³ μκ°νλ©΄ λλ€.
π μ μ©νκΈ°
μ°μ΅νκΈ° μν΄μ 'κ°λ°νκ²½ μΈν νκΈ°'λΌλ λ§μΌ μ€ν€ νλμ,
μλμ ν¬λ, μ§νμ€μ μλ λ κ°μ μ΄μλ₯Ό μ€μ νλ€.
μλλ νλ‘μ νΈμμ λ³Ό μ μλ νλ©΄μ΄λ€.
μ΄μλ₯Ό μμ±ν λ λ§μΌμ€ν€μ μ§μ ν μ μλ€.
μ μ΄κΈ° μ΄μ ν μμ΄μ½κ³Ό μλ κ² λ§μΌμ€ν€.
νΈμ-ν리νμ€νΈ λ 리며 νλ‘μ νΈμ λ§μΌμ€ν€, μ΄μλ₯Ό μ€μ ν΄μ€¬λλ, μ λ κ² μμμ μ΄λ‘μμΌλ‘ κ½ μ°¨κ³ λ§μΌμ€ν€μ΄ λ€ λ¬μ± λλ€.
π Git Flow
νΈμ, ν리νμ€νΈ, λ¨Έμ§ νμΌλ©΄ νμ λ‘컬λ©μΈμ mainμλ λ°μμ ν΄μ κ°μ λ²μ μΌλ‘ λ°λΌκ°κ² ν΄μ£Όκ³ μλ€.
(νμ§λ§, μμ λ€λ₯Έ λ²μ μ λ§λ€μ΄ λ°λ‘ κ΄λ¦¬νλ€λ©΄ κ·Έλ΄ νμ μλ€.)
κ·Έλμ λλ λ‘컬 mainμλ git pullλ‘ νμ¬ λ¨Έμ§λ μνλ₯Ό λ겨μλ€.
κ·ΈλΌ λ‘컬, 리λͺ¨νΈμ λͺ¨λ λΈλμΉκ° λ€ κ°μ μν!
Piggy ννμ νλ λμ μ°λ¦¬ νμλ€μ masterμ κ°μ μμ νλ λΈλμΉλ‘ λλμ΄μ μμ μ νλ€.
μλ κ² μ½λ κ΄λ¦¬λ₯Ό μν΄ λΈλμΉ μ’ λ₯λ₯Ό λλ μ κ΄λ¦¬νλ κ±Έ Git FlowλΌκ³ νλ€.
μ½λμ€ν μ΄μΈ λ μ¬λ¬ μ’ λ₯μ κΉ νλ‘μ° μ€μμλ Git flowλ₯Ό λ¨μνν Coz’ Git flowλ₯Ό μ μνλ€.
π Coz’ Git flow
μ£Όμ λΈλμΉ main, dev λκ° + μμ λΈλμΉλ‘ μ΄λ£¨μ΄μ Έ μλ€.
main λΈλμΉ
μ¬μ©μμκ² μΈμ λ μ νμΌλ‘ μΆμν μ μλ λΈλμΉ
νμ¬μ λ°λΌμ master, prod, productionλ± λ€μνκ² λΆλ¦½λλ€.
“μΈμ λ λ°°ν¬ν μ μλ€"μ μλ―Έλ νμ¬ λ³λ‘, ν λ³λ‘ λ€λ₯Ό μ μμ΅λλ€. λ€λ§, μ΅μνμ κΈ°μ€μ μΈμλ³Ό μ μμ΅λλ€.
- λνμ μΈ κΈ°λ₯μ΄ μμ±λμλ€.
- κΈ°μ‘΄ κΈ°ννλ λ μ΄μμμ΄λ μ 체μ μΈ λμμΈμ΄ μΌμΆ μμ±λμλ€.
- ν΄λΌμ΄μΈνΈ, μλ², λ°μ΄ν°λ² μ΄μ€κ° 곡κ°λ μΉμμ μ μμ μΌλ‘ ν΅μ ν μ μλ€.
- μ΅μνμ 보μμ΄ λ§λ ¨λμλ€.
- λΈλΌμ°μ μμ κ°λ° λ²μ μμ μ¬μ©νλ secretμ΄λ μ μ μ λΉλ°λ²νΈκ° λ ΈμΆλλκ°?
- μ μ μ κΈ°λ° μ 보 μ‘°νλ₯Ό μν΄ μΈμ¦ ν ν°, μΈμ μ΄ κΌ νμνκ°?
μ΄λ κ² μΌμ κΈ°μ€μ μΆ©μ‘±νκ³ , ν΅μ¬ κΈ°λ₯μ΄ μμ±λμμΌλ©΄ main λΈλμΉλ‘ λ°°ν¬λ₯Ό ν μ μμ΅λλ€.
dev λΈλμΉ
λ€μ λ²μ λ°°ν¬λ₯Ό μν "κ°λ° μ€!" λΈλμΉ
dev λΈλμΉλ λ€μ λ²μ λ°°ν¬λ₯Ό μν "κ°λ° μ€!" λΈλμΉμ λλ€. main λΈλμΉμμλΆν° λΈλμΉμ νλκ² λ³΄ν΅μ΄λ©°, κ°λ₯νλ©΄ νλ‘μ νΈ νμκ³Ό νλ‘ νΈμλμ λ°±μλμ κ²°κ³Όλ₯Ό ν©μ³μ νμΈν΄λ³Ό μ μμ μ λλ‘ μ€λΉκ° λμ΄μΌ ν©λλ€. CI/CD νμ΄νλΌμΈμ΄ μ ꡬμΆλμ΄ μλ€λ©΄ dev λΈλμΉμ μ½λλ λ°°ν¬λ₯Ό ν΄λκ³ μμλ‘ νμΈν μλ μμ΅λλ€.
main λΈλμΉμ dev λΈλμΉλ Github 리ν¬μ§ν 리μ λ μ λ°μ΄νΈ λμ΄μμ΄μΌ νλ©°, νμμ μ½λ 리뷰λ₯Ό λ°κ³ μ§ννλ κ²μ΄ μ μμ λλ€. μλ°ν μ½λ λ¦¬λ·°κ° μ΄λ ΅λ€λ©΄, κ°μ΄ λͺ¨μ¬μ μ½λμ λν΄μ μ΄μΌκΈ°λ₯Ό λλκ³ , λ°°ν¬ μν©μ μ κ²νλ μ€ν λμ νμλ₯Ό μ΄μ΄λ μ’μ΅λλ€. λ무 격μμ΄ μμ νμλ μμ§λ§, κ°λ₯νλ©΄ λͺ¨λ νμμ΄ νμΈ κ°λ₯νκ² “μ΄λ€ μ½λμ μ΄λλ₯Ό μ μ΄λ κ² λ°κΏ¨μΌλ©΄ μ’κ² λ€.”λΌλ μ½λ©νΈλ₯Ό Github Pull Requestμ λ¨κΈ°λ κ²μ κΆμ₯ν©λλ€.
feature λΈλμΉ
feature λΈλμΉλ κΈ°λ₯ κ°λ°, 리νν λ§, λ¬Έμ μμ , λ¨μ μ€λ₯ μμ λ± λ€μν μμ μ κΈ°λ‘νκΈ° μν λΈλμΉμ λλ€. λΆλ₯λ₯Ό μΈμΈνκ² λλκΈ°λ₯Ό μνλ νμ¬μμλ refactor, fix, docs, choreμ κ°μ΄ μΈμΈνκ² μ»€λ° λ©μμ§λ λΈλμΉ λͺ μ prefixλ₯Ό λ¬κΈ°λ ν©λλ€. μλλ feature λΈλμΉ μ΄λ¦κ³Ό μ»€λ° λ©μμ§μ μμμ λλ€. λ λ§μ μ¬λ‘λ Conventional Commits μ λν΄μ νμΈνμ€ μ μμ΅λλ€.
hash (λΈλμΉ λͺ
) μ»€λ° λ©μμ§
2f85eea (feat/create-todo) feat: Todo μΆκ° κΈ°λ₯
2ad0805 (fix/var-name) fix: λ³μ λ€μ΄λ° 컨벀μ
μ λ§κ² λ³μλͺ
λ³κ²½ (ismale => isMale)
e7ce3ad (refactor) refactor: λΆνμν for 루ν μμ
feature λΈλμΉλ λ³΄ν΅ κ° κ°μΈμ λ‘컬 리ν¬μ§ν 리μμ λ§λ€κ³ μμ ν©λλ€. feature λΈλμΉλ κΈ°λ₯ κ°λ°μ μν λΈλμΉμ΄κΈ° λλ¬Έμ 2λͺ μ΄μ κ°μ΄ μμ νλ κ²½μ°κ° λλ¬Όμ΄μ, λΈλμΉ μμ±μ΄λ μμ μ λν΄μ λ무 λλ €μ ν νμλ μμ΅λλ€. μμ κΈ°λ₯μ΄λΌλ λΈλμΉλ₯Ό μλ‘ λ§λ€κ³ , μμ£Ό 컀λ°νκ³ , μμ£Ό μ격 Github 리ν¬μ§ν 리μ pushνμ¬ νμλ€κ³Ό κ²°κ³Όλ₯Ό 곡μ νλ κ²μ΄ λ°λμ§ν©λλ€. κ°μΈ λ‘컬 리ν¬μ§ν 리μμ λ무 μ€λ μμ μ νλ€λ³΄λ©΄, μ½κ² λ°κ²¬ν μ μλ μ€λ₯λ λ°κ²¬μ΄ λμ§ μκ³€ ν©λλ€. λ λμ μ½λλ₯Ό μν΄ νΌλλ°± λ°λ κ²μ λλ €μνμ§ λ§μλ€.
νμ¬μ λ°λΌμ μ»€λ° κΈ°λ‘μ λ¨κΈ°λ μΌλ°μ μΈ rebase-and-merge, κΈ°λ₯λ§λ€ κΉλνκ² μ»€λ°μ λ¨κΈ°κΈ°λ₯Ό μν΄μ μ»€λ° κΈ°λ‘μ μ 리νλ squash-and-mergeλ± λ€μν merge μ λ΅μ΄ μμ΅λλ€. μ΄λ² Pre-Projectμμλ squash-merge μ λ΅μ μ¬μ©ν΄λ³΄κ³ , Main-Projectμμλ νμκ° μμλ₯Ό ν΅ν΄ merge μ λ΅μ μΈμ°κΈΈ λ°λλλ€. λ§μ κ²½μ° feature λΈλμΉλ λ¨Έμ§νκ³ λμ μμ νμ§λ§, 볡μν΄μΌ ν νμμ±μ΄ μλ κ²½μ°λ λ¨κ²¨λκΈ°λ ν©λλ€.
μ€νΈλΌ
κ·Όλ° squash-and-mergeλ₯Ό λ μμΈν μμ보μ
squash-and-mergeλ?
squash-and-mergeλ λ³ν©ν λ μ¬λ¬κ°μ 컀λ°μ νλμ 컀λ°μΌλ‘ ν©μΉ ν λ¨Έμ§ νλ λ°©μ
Squash merging is a merge option that allows you to condense the Git history of topic branches when you complete a pull request. Instead of each commit on the topic branch being added to the history of the default branch, a squash merge adds all the file changes to a single new commit on the default branch
μμ§ μ ννλ λͺ¨λ₯΄κ² μ§λ§, μμ ν κ±Έ λ§μ€ν°/λ©μΈμ λ°λ‘ 컀λ°νλ κ² μλλΌ, λ‘컬μμ κ°κ° μμ ν λΈλμΉλ€μ λ¨Όμ λ¨Έμ§ν ν,
κ·Έ λ€μμ λ§μ€ν°/λ©μΈμ λ³ν©νλ κ±Έλ‘ μ΄ν΄νλ€.
μ°Έκ³
μ½λμ€ν μ΄μΈ
https://docs.microsoft.com/ko-kr/azure/devops/repos/git/merging-with-squash?view=azure-devops