Intro
μλ νμΈμ. μ΄λ² μκ°μλ git submodule / subtree μ λν΄ μμλ³΄κ² μ΅λλ€.
submodule
# Goal
νλ μ΄μμ μΈλΆ μ μ₯μ (git μ μ₯μ)λ₯Ό νμ¬ νλ‘μ νΈμ ν¬ν¨μν€κΈ° μν΄ μ¬μ©ν©λλ€.
# How to work
λΆλͺ¨ μ μ₯μ(repository)λ μλΈλͺ¨λμ΄λΌ λΆλ¦¬λ λ³λμ μ μ₯μλ₯Ό κ°λ¦¬ν€λ λ§ν¬λ§μ μ μ§νκ³ μμ΅λλ€. μ΄ μ μ₯μλ μ체μ μΌλ‘ λ 립μ μΈ Git μ μ₯μλ‘μ κ΄λ¦¬λλ©°, λΆλͺ¨ μ μ₯μμλ ν΄λΉ μλΈλͺ¨λμ μν(μ»€λ° ν΄μ)λ§μ κΈ°λ‘ν©λλ€.
# Usage
μλΈλͺ¨λ μΆκ°: git submodule add <repository-url> <path>
λΆλͺ¨ μ μ₯μμμ μλΈλͺ¨λ μ λ°μ΄νΈ: git submodule update --init --recursive
subtree
# Goal
μΈλΆ μ μ₯μμ μΌλΆ λλ μ 체λ₯Ό νμ¬ νλ‘μ νΈμ μλΈλλ ν 리μ ν΅ν©μν€κΈ° μν΄ μ¬μ©λ©λλ€.
#How to work
μΈλΆ μ μ₯μμ νΉμ λλ ν 리λ₯Ό νμ¬ μ μ₯μλ‘ κ°μ Έμ€λ λ°©μμΌλ‘ λμν©λλ€. μ΄λ μΈλΆ μ μ₯μμ νΉμ μ»€λ° μ΄λ ₯μ νμ¬ μ μ₯μμ νλμ 컀λ°μΌλ‘ ν΅ν©ν©λλ€.
#Usage
μΈλΆ μ μ₯μμ νΉμ λλ ν 리 κ°μ Έμ€κΈ°: git subtree add --prefix <prefix> <repository-url> <branch>
μλΈνΈλ¦¬ μ λ°μ΄νΈ: git subtree pull --prefix <prefix> <repository-url> <branch>
Example
#git submoduleμ μ¬μ©ν΄μΌ νλ κ²½μ°
1. μΈλΆ λΌμ΄λΈλ¬λ¦¬ λλ νλ‘μ νΈμ νΉμ λ²μ μ μ ννκ² ν¬ν¨μν€κ³ μ ν λ: μλ₯Ό λ€μ΄, νλ‘μ νΈκ° μΈλΆ λΌμ΄λΈλ¬λ¦¬μ νΉμ λ²μ μ μμ‘΄νκ³ μμ λ, ν΄λΉ λ²μ μ μ½λλ₯Ό μλΈλͺ¨λλ‘ μΆκ°νμ¬ μΈλΆ λΌμ΄λΈλ¬λ¦¬μ μ λ°μ΄νΈμ μν₯μ λ°μ§ μλλ‘ ν μ μμ΅λλ€.
# μμ: μΈλΆ λΌμ΄λΈλ¬λ¦¬μ νΉμ λ²μ μ νλ‘μ νΈμ ν¬ν¨
git submodule add https://github.com/example/library.git external/library
2. μ¬λ¬ νλ‘μ νΈμμ 곡μ λλ μ½λλ₯Ό μ μ§ λ° κ΄λ¦¬ν λ: μ¬λ¬ νλ‘μ νΈμμ 곡ν΅μΌλ‘ μ¬μ©λλ μ½λλ₯Ό λ 립μ μΈ μ μ₯μλ‘ μ μ§νκ³ , κ° νλ‘μ νΈμμλ μ΄ μ½λλ₯Ό μλΈλͺ¨λλ‘ μΆκ°νμ¬ μ€λ³΅μ λ°©μ§νκ³ κ΄λ¦¬μ μ©μ΄μ±μ ν보ν μ μμ΅λλ€.
# μμ: μ¬λ¬ νλ‘μ νΈμμ 곡μ λλ μ½λλ₯Ό μλΈλͺ¨λλ‘ μΆκ°
git submodule add https://github.com/example/common-code.git common-code
#git subtreeλ₯Ό μ¬μ©ν΄μΌ νλ κ²½μ°
1. λ€λ₯Έ νλ‘μ νΈμ μΌλΆ μ½λλ₯Ό νμ¬ νλ‘μ νΈμ ν΅ν©ν λ: νΉμ μΈλΆ νλ‘μ νΈμ νΉμ λλ ν 리λ§μ νμ¬ νλ‘μ νΈμ ν΅ν©νκ³ μ ν λ, git subtreeλ₯Ό μ¬μ©ν μ μμ΅λλ€.
# μμ: μ¬λ¬ νλ‘μ νΈμμ 곡μ λλ μ½λλ₯Ό μλΈλͺ¨λλ‘ μΆκ°
git submodule add https://github.com/example/common-code.git common-code
2. μ¬λ¬ νλ‘μ νΈ κ°μ μ½λλ₯Ό 곡μ νλ©΄μλ κ°κ°μ νλ‘μ νΈμμ μ½λμ μΌλΆλΆλ§ μ¬μ©νκ³ μ ν λ: μλΈνΈλ¦¬λ₯Ό μ¬μ©νμ¬ μΈλΆ νλ‘μ νΈμ νΉμ λλ ν 리λ§μ νμ¬ νλ‘μ νΈλ‘ κ°μ Έμμ μ¬μ©ν μ μμ΅λλ€.
# μμ: μ¬λ¬ νλ‘μ νΈ κ°μ μ½λλ₯Ό 곡μ νλ©΄μ κ°κ°μ νλ‘μ νΈμμ μ½λμ μΌλΆλΆλ§ μ¬μ©
git subtree add --prefix common-code https://github.com/example/common-code.git main
differences between git submodule and git subtree
- Relationship with External Repositories
- git submodule: κ° μλΈλͺ¨λμ λν΄ λ³λμ΄λ©° λ 립μ μΈ Git μ μ₯μλ₯Ό μ μ§ν©λλ€. λΆλͺ¨ μ μ₯μλ μλΈλͺ¨λμ νΉμ 컀λ°μ μ°Έμ‘°ν©λλ€.
- git subtree: μΈλΆ μ μ₯μμ λ΄μ©μ μ£Ό μ μ₯μμ νμ λλ ν°λ¦¬λ‘ κ°μ Έμ, μΈλΆ μ μ₯μλ₯Ό μ£Ό μ μ₯μμ λ³ν©ν©λλ€.
- Independence
- git submodule: μλΈλͺ¨λμ λ
립λ μ μ₯μμ
λλ€. μλΈλͺ¨λ λ΄μ λ³κ²½μ¬νμ λ³λλ‘ μΆμ λλ©°, λΆλͺ¨ μ μ₯μμμλ λͺ
μμ μΌλ‘ μλΈλͺ¨λμ μλ‘μ΄ μ»€λ°μΌλ‘ μ
λ°μ΄νΈν΄μΌ ν©λλ€.
git subtree: μΈλΆ μ μ₯μμ μ½λλ μ£Ό μ μ₯μμ μΌλΆκ° λλ©°, κ°μ Έμ¨ μ½λλ μ£Ό μ μ₯μ λ΄μμ μ§μ 컀λ°λκ³ μΆμ λ©λλ€
- git submodule: μλΈλͺ¨λμ λ
립λ μ μ₯μμ
λλ€. μλΈλͺ¨λ λ΄μ λ³κ²½μ¬νμ λ³λλ‘ μΆμ λλ©°, λΆλͺ¨ μ μ₯μμμλ λͺ
μμ μΌλ‘ μλΈλͺ¨λμ μλ‘μ΄ μ»€λ°μΌλ‘ μ
λ°μ΄νΈν΄μΌ ν©λλ€.
- Ease of Use
- git submodule: μλΈλͺ¨λμ μ΄κΈ°ννκ³ μ
λ°μ΄νΈνκΈ° μν΄ μΆκ°μ μΈ λͺ
λ Ή(git submodule init, git submodule update)μ΄ νμν©λλ€. μ¬μ©μλ μλΈλͺ¨λ νΉν λͺ
λ Ήμ λν΄ μκ³ μμ΄μΌ ν©λλ€.
git subtree: μλΈνΈλ¦¬λ μ£Ό μ μ₯μ λ΄μ λ€λ₯Έ λλ ν°λ¦¬μ λ§μ°¬κ°μ§λ‘ μ²λ¦¬λ©λλ€. μ¬μ©μλ μλΈλͺ¨λ νΉν λͺ λ Ήμ κ±±μ νμ§ μκ³ μ΅μν Git λͺ λ Ήμ΄λ‘ μμ ν μ μμ΅λλ€.
- git submodule: μλΈλͺ¨λμ μ΄κΈ°ννκ³ μ
λ°μ΄νΈνκΈ° μν΄ μΆκ°μ μΈ λͺ
λ Ή(git submodule init, git submodule update)μ΄ νμν©λλ€. μ¬μ©μλ μλΈλͺ¨λ νΉν λͺ
λ Ήμ λν΄ μκ³ μμ΄μΌ ν©λλ€.
- Workflow
- git submodule: νλ‘μ νΈμ μΈλΆ μ½λλ₯Ό νΉμ λ²μ μΌλ‘ 격리λκ³ λ²μ κ΄λ¦¬νκ³ μΆμ λ μ£Όλ‘ μ¬μ©λ©λλ€. μΈλΆ μ μ₯μμ νΉμ λ²μ μ μΆμ νκ³ μ ν λ μ μ©ν©λλ€.
git subtree: μΈλΆ μ½λλ₯Ό νλ‘μ νΈμ λλ ν°λ¦¬ ꡬ쑰μ μΌλΆλ‘ ν¬ν¨νκ³ , μ΄λ₯Ό μ½λλ² μ΄μ€μ μ€μν λΆλΆμΌλ‘ μ·¨κΈνλ €λ κ²½μ°μ μ ν©ν©λλ€.
- git submodule: νλ‘μ νΈμ μΈλΆ μ½λλ₯Ό νΉμ λ²μ μΌλ‘ 격리λκ³ λ²μ κ΄λ¦¬νκ³ μΆμ λ μ£Όλ‘ μ¬μ©λ©λλ€. μΈλΆ μ μ₯μμ νΉμ λ²μ μ μΆμ νκ³ μ ν λ μ μ©ν©λλ€.
- Complexity
- git submodule: λ μ λ°ν μ μ΄μ 격리λ₯Ό μ 곡νμ§λ§, μλΈλͺ¨λ μ΄κΈ°ν λ° μ
λ°μ΄νΈ νμλ‘ μΈν΄ μ΄λ μ λμ 볡μ‘μ±μ μΆκ°ν©λλ€.
git subtree: μΈλΆ μ½λλ₯Ό νλ‘μ νΈμ λ λ¨μνκ² ν΅ν©νκ³ μ ν λ μ¬μ©λλ©°, μλΈλͺ¨λ νΉν λͺ λ Ή μμ΄λ μ΅μν Git λͺ λ Ήμ΄λ‘ μμ ν μ μμ΅λλ€.
- git submodule: λ μ λ°ν μ μ΄μ 격리λ₯Ό μ 곡νμ§λ§, μλΈλͺ¨λ μ΄κΈ°ν λ° μ
λ°μ΄νΈ νμλ‘ μΈν΄ μ΄λ μ λμ 볡μ‘μ±μ μΆκ°ν©λλ€.