Git λ΄λΆ λμ νν€μΉκΈ° - Part 1
- #Git
- #git directory
- #blob
- #index
- #ios
λ€μ΄κ°λ©°
μλ νμΈμ. μ μ μΌλ‘ μλμ λͺ¨λ°μΌνμμ μ± κ°λ°μ λ§‘κ³ μλ μ΄νμ°μ λλ€.
Gitμ μννΈμ¨μ΄ κ°λ°μμ νμμ μ΄κ³ κ°λ ₯ν λꡬ μ€ νλμ λλ€. μ΄λ₯Ό νμ©νλ©΄ μ¬λ¬ λͺ μ κ°λ°μκ° νμ νλ νλ‘μ νΈμμ μ½λμ λ³κ²½ μ¬νμ μΆμ νκ³ , μ½λ λ²μ κ΄λ¦¬λ₯Ό ν¨κ³Όμ μΌλ‘ μνν μ μλ€λ ν° μ₯μ μ΄ μμ΅λλ€.
νμ¬ λͺ¨λ°μΌν μμ μ΄ Gitμ νμ©νλ©΄μ κ°λ°μ μ§ννκ³ μλλ°μ, κ°λ°νλ λμ€ Gitμ resetμ μ리λ₯Ό μ νν λͺ¨λ₯Έμ± μλͺ» μ¬μ©νμ¬ λ°μ΄ν°κ° μμ€λκ³ νλ‘μ νΈκ° κΌ¬μΈ μΌμ΄ λ°μνμμ΅λλ€. κ·Έλμ Git μ€μ΅κ³Ό ν¨κ» λ΄λΆλ₯Ό νν€μΉλ©° λ°°μ΄ λ΄μ©μ λ°νμΌλ‘ λ€μν λͺ λ Ήμ΄λ€μ΄ Git λ΄λΆμμ μ΄λ»κ² λμνλμ§λ₯Ό Part1, Part2λ‘ λλμ΄ μκ°νλ €κ³ ν©λλ€.
μ΄λ² ν¬μ€νΈ Part 1μμλ κΈ°λ³Έ λͺ λ Ήμ΄λ€μ ν΅ν΄ Gitμ λ΄λΆ λμ μ리 λ° ν΅μ¬ κ°λ λ€μ λ±λ±μ΄ νν€μ³ λ³΄κ² μ΅λλ€.
0) .Git λλ ν 리
gitμ ν΅ν΄ λ²μ κ΄λ¦¬λ₯Ό νκ² λλ©΄ μ¬λ¬ μ 보λ€μ΄ μμ±λλλ°, κ·Έ μμ±λ μ 보λ€μ .git λλ ν 리μ μ μ₯μ΄ λ©λλ€.
ls -al λͺ λ Ήμ΄λ₯Ό ν΅ν΄ .git λλ ν 리λ₯Ό μμΈν μ΄ν΄λ³΄λ©΄ λμ μ리λ₯Ό μ΄ν΄νλλ° ν΅μ¬μ μΈ μμλ€μ λ°κ²¬ν μ μμ΅λλ€.
1) Gitμ μ리
μ λ .git λλ ν 리 μμ ν΅μ¬μ μΈ μμλ€μ λ³νλ₯Ό gistoryλΌλ λΆμ λꡬλ₯Ό μ΄μ©νμ¬ λ³΄μ¬λλ¦¬λ €κ³ ν©λλ€.
gistoryλ λͺ λ Ήμ΄μ λ°λΌ Git λ΄λΆμ μ‘΄μ¬νλ νμΌλ€μ΄ μ΄λ ν μν₯μ λ°λμ§ git μ μ₯μμ μ»€λ° λ‘κ·Έλ₯Ό μκ°νν΄μ 보μ¬μ£Όλ λΆμ λꡬμ λλ€. μ΄ λꡬλ .git λλ ν 리 μμ μλ λ΄μ©λ€μ 리μ€νΈλ‘ 보μ¬μ£Όκ³ , μλ‘ μΆκ°λ νμΌ νΉμ λ³κ²½λ νμΌμ λ΄μ©λ€μ μμΈνκ² νμΈ λ° μΆμ ν μ μμ΅λλ€.
1-1 ) git init
μλμ μ¬μ§μ git initμ ν μ§νμ λ΄λΆ λͺ¨μ΅μ λλ€.
1-2) git add
μ΄ μνμμ f1.textλΌλ μ νμΌμ μμ±νκ² λλ©΄ git λ΄λΆμ λ³νκ° μκΈΈκΉμ?
μλμ. νμΌμ μμ±νλλ°μ gitμ΄ κ΄μ¬νμ§ μκΈ° λλ¬Έμ λ³ννμ§ μμ΅λλ€.
μ΄λ²μ νμΌμ μμ± νμ λͺ λ Ήμ΄ βaddβλ₯Ό μ¬μ©νκ² λλ©΄ μ΄λ€μΌμ΄ μκΈΈκΉμ?
μμ κ°μ΄ git λ΄λΆμ index νμΌ, objects λλ ν 리μ μλ 78/981β¦ νμΌμ λ³νκ° μκΈ΄ κ²μ νμΈν μ μμ΅λλ€. κ·Έ μμ μμΈν μ΄ν΄λ³΄λ©΄ objects λλ ν 리 μμ μλ 78/981β¦ νμΌμ μ κ° μμ±ν f1.text λ΄μ©μ΄ blob νμΌ ννλ‘ μ μ₯λμ΄ μκ³ , index μ ν μλ νμΌ μ΄λ¦μ f1.textμ΄ μλ 7898β¦λ‘ μμνλ μ΄λ ν μ 보μ λ΄κ²¨μ Έμμ΅λλ€. μ΄ λμ κ΄κ³λ₯Ό μμΈν λ€μ¬λ€λ³΄λ, βindexμ 7898β¦85 μ«μβ λ βobjectμ 78λ²μ§Έ λλ ν 리 + 9819..85β μμ μ μ μμμ΅λλ€.
1-3) blob
μ κ° blob ννλ‘ μ μ₯λλ€κ³ νλλ°, blobμ΄ λ¬΄μμΌκΉμ?
gitμμλ νμΌμ΄λ λλ ν 리λ₯Ό μ μ₯ν λ λ΄μ©μ μ§μ μ μ₯νμ§ μκ³ , sha1λ ν΄μ μκ³ λ¦¬μ¦μ ν΅ν΄ blob νμΌ μ΄λ¦μ λμΆν©λλ€. μ΄ blob κ°μ²΄λ κ°μ λ΄μ©μ νμΌμ΄ μ¬λ¬κ° μμ κ²½μ°, νλμ βblobβ κ°μ²΄λ§ μ μ₯νκ³ μ΄λ₯Ό μ¬λ¬ νμΌμ΄ μ°Έμ‘°νλ λ°©μμΌλ‘ μ²λ¦¬νμ¬ μ€λ³΅ νμΌμ ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν μ μμ΅λλ€.
κ·Έλ λ€λ©΄ μ΄λ₯Ό νμΈνκΈ° μν΄ f1.textλ₯Ό copy ν΄λ³΄κ² μ΅λλ€.
.git λλ ν 리 λ΄λΆμμλ indexμ objects/78/98..85 λ νμΌμ λ³νκ° μκΈ΄ κ² νμΈν μ μμ΅λλ€.
λ¨Όμ index νμΌμ 보면 f1.textμ f3.text λͺ¨λ κ°μ νμΌ μ΄λ¦μ΄ μ νμμκ³ μ΄λ 곧 κ°μ μ€λΈμ νΈλ₯Ό κ°λ¦¬ν€κ³ μμμ μ μ μμμ΅λλ€. κ·Έ λ€μ objects/78/98..85λ κΈ°μ‘΄ f1.textμ λ΄μ©μ λ΄κ³ μλ νμΌλ‘ νμ¬ f1.textμ f3.text λͺ¨λ κ°μ μ€λΈμ νΈλ₯Ό κ°λ¦¬ν¨λ€λ κ²μ μ μ μμμ΅λλ€.
μ¦, gitμ μ΄λ ν νμΌμ μ μ₯ν λ indexμλ νμΌλͺ κ³Ό blob νμΌμ£Όμλ₯Ό κ°μ§κ³ μλλ° νμΌ λ΄μ©μ΄ κ°λ€λ©΄ κ°μ blob νμΌ μ£Όμ( object νμΌ )λ₯Ό κ°λ¦¬ν€κ² λμ΄ μ€λ³΅μ λ°©μ§ν μ μκ² λ©λλ€. κ·Έλμ λ΄μ©μ΄ λμΌνλ©΄μ μ©λμ΄ ν¬κ³ μ΄λ¦μ΄ λ€λ₯Έ μ¬λ¬κ°μ νμΌμ΄ μ‘΄μ¬νλλΌλ νλμ blobμ μ°Έμ‘°νκ³ μμ΄ ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν μ μλ€λ μ₯μ μ΄ μμ΅λλ€.
1-4) commit
μ΄λ²μ addν νμΌλ€μ commitλ₯Ό ν΄λ³΄μμ΅λλ€.
κ°μ₯ λ¨Όμ objectsμ 18/1031..78 νμΌμ μ΄μ΄λ³΄λ©΄ commit λ©μμ§ μ λ³΄κ° μ μ₯λμμμ νμΈν μ μμ΅λλ€.
commit μμλ μμ±μ, μ»€λ° λ΄μ©, treeκ° μμ΅λλ€. μ΄ treeλ sha1μΌλ‘ λ§λ€μ΄μ§ ν΄μκ°μ΄λ©°, μ΄ κ°μ μΆμ νλ©΄ 컀λ°ν κ°κ°μ νμΌλ€μ μ΄λ¦κ³Ό λ΄μ©μ λ΄κ³ μλ blob νμΌ μ΄λ¦μ κ΄ν μ 보λ₯Ό κ°μ§κ³ μμμ μ μ μμμ΅λλ€. μ΄λ₯Ό ν΅ν΄ commitμ νκ² λλ©΄, commit κ²°κ³Όλ μ€λΈμ νΈ νμΌλ‘ μ μ₯μ΄ λκ³ , μ΄ νμΌμ μ‘΄μ¬νλ treeμ κ°μ νμ¬ μ°λ¦¬κ° μμ±ν λ²μ μ ν΄λΉλλ νμΌμ μ΄λ¦κ³Ό λ΄μ©μ΄ λ§ν¬λμ΄ μμμ μ μ μμ΅λλ€.
μ΄ μνμμ f2.text λ΄μ©μ μμ ν add, commit ν λλ μ΄λ ν λ³νκ° μκΈΈκΉμ?
λ¨Όμ addλ₯Ό νκ² λλ©΄ indexνμΌμ f2.text ν΄μκ°μ΄ λ³κ²½λκ³ μμ λ λ΄μ©μ λ΄κ³ μλ μ objectsκ° μμ±λμμμ μ μ μμ΅λλ€.
λ€μμΌλ‘ commitμ νκ² λλ©΄ μ΄λ»κ² λ κΉμ?
μλ‘μ΄ ParentλΌλ μ λ³΄κ° μΆκ°λμκ³ , μ΄λ₯Ό μΆμ ν΄λ³΄λ©΄ μ§μ 컀λ°μ μ 보λ₯Ό νμΈν μ μμ΅λλ€. μ¦, treeλ νμ¬ μ»€λ°ν μ€λΈμ νΈλ₯Ό κ°λ¦¬ν€λ ν΄μκ°μ, parentλ μ§μ 컀λ°ν μ€λΈμ νΈλ₯Ό κ°λ¦¬ν€λ ν΄μκ°μ κ°μ§κ³ μλ€λ κ²μ μ μ μμ΅λλ€.
μ’ ν©ν΄λ³΄λ©΄ commitμ μλμ κ°μ μ 보λ₯Ό κ°μ§κ³ μμ΅λλ€.
- commitμ λ³κ²½ μ¬νμ κΈ°λ‘νλ λ©νλ°μ΄ν°μ λͺ¨μμΌλ‘, κ·Έ μμ μμ±μ, μμ± μΌμ, μ»€λ° λ©μμ§, treeλ₯Ό κ°μ§κ³ μλ€.
- commitμ λ³κ²½ μ¬ν μ체λ₯Ό μ μ₯νλ λμ μ΄λ₯Ό ν¬ν¨νλ νμΌμ μ€λ μ·μ μ°κ³ , ν΄λΉ μ€λ μ·μ λν μ°Έμ‘°λ₯Ό treeλΌλ μ 보 ꡬ쑰μ μ μ₯νλ€.
- treeμλ commitμ΄ μΌμ΄λ μμ μ μ°λ¦¬μ μμ λλ ν 리μ μλ νμΌλͺ κ³Ό λ΄μ©μ λ΄κ³ μλ Blob νμΌμ£Όμκ° λ΄κ²¨μκ³ μ΄λ₯Ό ν΅ν΄ νλ‘μ νΈ ν΄λμ λν μνλ₯Ό μ»μ΄ λΌ μ μλ€.
- κ° commit(λ²μ )λ§λ€ μλ‘ λ€λ₯Έ νΈλ¦¬λ₯Ό κ°λ¦¬ν€κ³ μλ€.
- parent κ°μ ν΅ν΄ μ΄μ 컀λ°(μ§μ λ²μ )μ΄ λꡬμΈμ§ μ μ μλ€.
1-5) object νμΌ
λν objects λλ ν 리 μμ λ€μ΄μλ object νμΌμ ν¬κ² 3κ°μ§λ‘ μ μν μ μμ΅λλ€.
- νμΌμ λ΄μ©μ λ΄κ³ μλ Blob ννμ νμΌ
- μμ λλ ν 리μ μλ νμΌλͺ κ³Ό νμΌ λ΄μ©μ ν΄λΉλλ Blob μ 보λ₯Ό λ΄κ³ μλ tree νμΌ
- λ³κ²½ μ¬νμ κΈ°λ‘νλ λ©νλ°μ΄ν°( μμ±μ, μμ±μΌμ, μ»€λ° λ©μμ§, tree)λ₯Ό λ΄κ³ μλ commit νμΌ
Gitμ ν΅μ¬ κ°λ 3κ°μ§
μμ μ€λͺ λλ¦° Gitμ μ리μ μ΄μ΄μ working directory, staging area, repositoryμ λν΄μ μκΈ°ν΄λ³΄κ² μ΅λλ€. κ° κ°λ μ 무μμ μλ―Ένκ³ μλ‘ μ΄λ€ μ°κ΄ κ΄κ³κ° μλμ§ μμλλ‘ μ λ¬λλ¦¬κ² μ΅λλ€.
- Working directory(workspace)λ .git λ°κΉ₯μͺ½μ μλ νμ¬ νλ‘μ νΈ ν΄λμ μ‘΄μ¬νλ νμΌλ€ μ체λ₯Ό μλ―Ένλ©° μλ‘μ΄ νμΌμ μμ±νκ±°λ κΈ°μ‘΄ νμΌμ μμ νλ λ±μ μμ
μ μ΄ λλ ν 리μμ μνν©λλ€.
- μμΉ : κ°μ νλ‘μ νΈ ν΄λ
- Staging Area(Index)λ Gitμ΄ μΆμ νκ³ μλ λ³κ²½ μ¬ν μ€ μ΄λ€ κ²μ λ€μ λ²μ μ 컀λ°μ ν¬ν¨μν¬μ§ μ ννλ λ¨κ³μ΄λ©° μ»€λ° νκΈ° μ λ³κ²½ μ¬νμ κ²ν νκ³ μ μ ν μνλ‘ μ€λΉν©λλ€. μ΄ κ³³μ λ΄λΆμ μΌλ‘ Index νμΌμ΄λ©°, μ¬μ©μμ μ
μ₯μμ indexλΌλ ννμ΄ μλΏμ§ μμ μ μμ΄ Commit λκΈ° μνλΌλ μλ―Έμμ Staging areaλΌκ³ λΆλ¦
λλ€.
- μμΉ : νλ‘μ νΈ ν΄λ νμ .git/index νμΌ
- Repositoryλ λͺ¨λ 컀λ°κ³Ό ν΄λΉ 컀λ°μ λ©νλ°μ΄ν°λ₯Ό μ μ₯νλ Gitμ λ°μ΄ν°λ² μ΄μ€μ
λλ€.
- μμΉ : νλ‘μ νΈ ν΄λ νμ .git/objects/ β¦
λ¨Όμ μ°λ¦¬λ κ° Working Directoryμμ μλ‘μ΄ νμΌμ μμ±νκ±°λ μμ νλ λ±μ μμ μ μνν©λλ€. μ΄ν λ³κ²½ μ¬νμ Staging areaλ‘ μ΄λνμ¬ μ€λΉλ ν, 컀λ°μ μννμ¬ repositoryμ μ μ₯λ©λλ€. λ³κ²½ μ¬νμ 컀λ°ν λ, Gitμ staging areaμμ λ³κ²½ μ¬νμ μ€λ μ·μ μΊ‘μ²νμ¬ μλ‘μ΄ μ»€λ°μ λ§λλλ€. 컀λ°μ λ§λ€λ©΄ repositoryμμ ν΄λΉ 컀λ°μ λ©νλ°μ΄ν°κ° μ μ₯λ©λλ€.
λ°λΌμ, Gitμμ working directory, staging area, repositoryλ κ°κ° νμΌμ μμ νκ³ μ€λΉνλ 곡κ°, λ³κ²½ μ¬νμ 컀λ°νκΈ° μν΄ μ€λΉνλ 곡κ°, κ·Έλ¦¬κ³ λͺ¨λ 컀λ°κ³Ό ν΄λΉ λ©νλ°μ΄ν°λ₯Ό μ μ₯νλ Gitμ λ°μ΄ν°λ² μ΄μ€λ‘ λ§ν μ μκ² λ€μ.
μλ μ¬μ§μ Gitμ λ΄λΆ λμ μ리 μ΄ν΄λ³΄λ©° μ΄λ₯Ό λμνν λͺ¨μ΅μ λλ€.
κΈμ λ§λ¬΄λ¦¬νλ©°
μ΄λ² ν¬μ€νΈμμλ Gitμ κΈ°λ³Έ μ리μ init, add, commit λͺ λ Ήμ΄λ€μ λ°λΌ ν΅μ¬μ μΈ μμλ€μ΄ λ΄λΆμ μΌλ‘ μ΄λ»κ² λμνλμ§λ₯Ό μ΄ν΄λ³΄μλλ°μ. Gitμ μ νμ©νκΈ° μν΄μλ λͺ λ Ήμ΄λ€μ μ¬μ©λ²κ³Ό λμ μ리λ₯Ό μ μ΄ν΄νκ³ μν©μ λ§μΆ° μ μ ν μ΄μ©ν΄μΌν¨μ λ§μ΄ λκΌμ΅λλ€.
μ μ κ°μ΄ Gitμ λ΄λΆ λμμ μ λͺ¨λ₯΄μ ¨λ λΆλ€μ΄ κ³μ λ€λ©΄ μ΄ κΈμ λ³΄κ³ λμμ λ°μΌμ ¨μΌλ©΄ μ’κ² μ΅λλ€!
λ€μ Part2μμλ Gitμμ μ€μν μν μ λ΄λΉνλ λͺ λ Ήμ΄λ€μ λν΄μ λ μμΈν μ΄ν΄λ³΄κ² μ΅λλ€. λκΉμ§ μ½μ΄μ£Όμ μ κ°μ¬ν©λλ€.