π Chapter 1: μμνκΈ°
π λ²μ κ΄λ¦¬λ?β
- λ²μ κ΄λ¦¬ μμ€ν μ νμΌ λ³νλ₯Ό μκ°μ λ°λΌ κΈ°λ‘νλ€κ° λμ€μ νΉμ μμ μ λ²μ μ λ€μ κΊΌλ΄μ¬ μ μλ μμ€ν μ΄λ€.
- VCS(Version Control System)λ₯Ό μ¬μ©νλ©΄ κ° νμΌμ μ΄μ μνλ‘ λλ릴 μ μκ³ , μκ°μ λ°λΌ μμ λ΄μ©μ λΉκ΅ν΄ λ³Ό μ μκ³ , λκ° λ¬Έμ λ₯Ό μΌμΌμΌ°λμ§λ μΆμ ν μ μκ³ , λκ° μΈμ λ§λ€μ΄λΈ μ΄μμΈμ§λ μ μ μλ€.
- VCSλ₯Ό μ¬μ©νλ©΄ νμΌμ μμ΄λ²λ¦¬κ±°λ μλͺ» κ³ μ³€μ λλ μ½κ² 볡ꡬν μ μλ€.
π₯ λ‘컬 λ²μ κ΄λ¦¬β
π₯ μ€μμ§μ€μ λ²μ κ΄λ¦¬(CVCS)β
- νλ‘μ νΈλ₯Ό μ§ννλ€ λ³΄λ©΄ λ€λ₯Έ κ°λ°μμ ν¨κ» μμ ν΄μΌ νλ κ²½μ°κ° λ§μλ° μ΄λ΄ λ μκΈ°λ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ CVCSκ° κ°λ°λλ€.
- CVS, Subversion, Perforce κ°μ μμ€ν μ νμΌμ κ΄λ¦¬νλ μλ²κ° λ³λλ‘ μκ³ ν΄λΌμ΄μΈνΈκ° μ€μ μλ²μμ νμΌμ λ°μμ μ¬μ©(Checkout)νλ€.
- μ΄ λ°©λ²μ μΉλͺ μ μΈ κ²°μ μ΄ μλλ° κ°μ₯ λνμ μΈ κ²μ΄ μ€μ μλ²μ λ°μν λ¬Έμ μ΄λ€.
- λ§μ½ μλ²κ° λ€μ΄λλ©΄ κ·Έλμ μ무κ²λ ν μ μλ€.
π₯ λΆμ° λ²μ κ΄λ¦¬ μμ€ν β
- Git, Mecurial, Bazaar, Darcs κ°μ DVCSμμμ ν΄λΌμ΄μΈνΈλ λ¨μν νμΌμ λ§μ§λ§ μ€λ μ·μ Checkoutνμ§ μλλ€. κ·Έλ₯ μ μ₯μλ₯Ό μ λΆ λ³΅μ νλ€.
- μλ²μ λ¬Έμ κ° μκΈ°λ©΄ μ΄ λ³΅μ λ¬Όλ‘ λ€μ μμ ν μ μλ€. λͺ¨λ Checkoutμ λͺ¨λ λ°μ΄ν°λ₯Ό κ°μ§ μ§μ ν λ°±μ μ΄λ€.
- DVCS νκ²½μμλ 리λͺ¨νΈ μ μ₯μκ° μ‘΄μ¬νλλ° λ§μ μλ μλ€. κ·Έλμ μ¬λλ€μ λμμ λ€μν κ·Έλ£Ήκ³Ό λ€μν λ°©λ²μΌλ‘ νμ ν μ μλ€.
π Git κΈ°μ΄β
π₯ μ°¨μ΄κ° μλλΌ μ€λ μ·β
- VCSλ€κ³Ό Gitμ κ°μ₯ ν° μ°¨μ΄μ μ λ°μ΄ν°λ₯Ό λ€λ£¨λ λ°©λ²μ μλ€.
- ν° νμμ λ΄€μ λ VCS λλΆλΆμ κ΄λ¦¬νλ μ λ³΄κ° νμΌλ€μ λͺ©λ‘μ΄λ€. κ° νμΌμ λ³νλ₯Ό μκ°μμΌλ‘ κ΄λ¦¬νλ©΄μ νμΌλ€μ μ§ν©μ κ΄λ¦¬νλ€.
- νμ§λ§ Gitμ λ°μ΄ν°λ₯Ό νμΌ μμ€ν μ€λ μ·μΌλ‘ μ·¨κΈνκ³ ν¬κΈ°κ° μμ£Ό μλ€.
- νμΌμ΄ λ¬λΌμ§μ§ μμμΌλ©΄ Gitμ μ±λ₯μ μν΄μ νμΌμ μλ‘ μ μ₯νμ§ μλλ€. λ¨μ§ μ΄μ μνμ νμΌμ λν λ§ν¬λ§ μ μ₯νλ€.
- Gitμ λ°μ΄ν°λ₯Ό μ€λ μ·μ μ€νΈλ¦Όμ²λΌ μ·¨κΈνλ€.
π₯ κ±°μ λͺ¨λ λͺ λ Ήμ λ‘컬μμ μ€νβ
- κ±°μ λͺ¨λ λͺ λ Ήμ΄ λ‘컬 νμΌκ³Ό λ°μ΄ν°λ§ μ¬μ©νκΈ° λλ¬Έμ λ€νΈμν¬μ μλ λ€λ₯Έ μ»΄ν¨ν°λ νμ μλ€.
- νλ‘μ νΈμ λͺ¨λ νμ€ν λ¦¬κ° λ‘컬 λμ€ν¬μ μκΈ° λλ¬Έμ λͺ¨λ λͺ λ Ήμ μμκ°μ μ€νλλ€.
- μ¦, μ€νλΌμΈ μνμ΄κ±°λ VPNμΌλ‘ μ°κ²°ν μ μμ΄λ λ§νμμ΄ μΌν μ μλ€.
π₯ Gitμ 무결μ±β
- Gitμ λ°μ΄ν°λ₯Ό μ μ₯νκΈ° μ μ νμ 체ν¬μ¬μ ꡬνκ³ κ·Έ 체ν¬μ¬μΌλ‘ λ°μ΄ν°λ₯Ό κ΄λ¦¬νλ€. κ·Έλμ 체ν¬μ¬ μ μ΄λ μ΄λ ν νμΌμ΄λ λλ ν°λ¦¬λ λ³κ²½ν μ μλ€.
- 체ν¬μ¬μ Gitμμ μ¬μ©νλ κ°μ₯ κΈ°λ³Έμ μΈ λ°μ΄ν° λ¨μμ΄μ Gitμ κΈ°λ³Έ μ² νμ΄λ€.
- Gitμ SHA-1 ν΄μλ₯Ό μ¬μ©νμ¬ μ²΄ν¬μ¬μ λ§λ λ€. λ§λ 체ν¬μ¬μ 40μ κΈΈμ΄μ 16μ§μ λ¬Έμμ΄μ΄λ€.
π₯ Gitμ λ°μ΄ν°λ₯Ό μΆκ°ν λΏβ
- GitμΌλ‘ λ¬΄μΌ νλ Git λ°μ΄ν°λ² μ΄μ€μ λ°μ΄ν°κ° μΆκ°λλ€.
- λλ리거λ λ°μ΄ν°λ₯Ό μμ ν λ°©λ²μ΄ μλ€.
- μΌλ¨ μ€λ μ·μ 컀λ°νκ³ λλ©΄ λ°μ΄ν°λ₯Ό μμ΄λ²λ¦¬κΈ° μ΄λ ΅λ€.
π₯ μΈ κ°μ§ μνβ
- Gitμ νμΌμ Committed, Modified, Staged μ΄λ κ² μΈ κ°μ§ μνλ‘ κ΄λ¦¬νλ€.
- Committedλ λ°μ΄ν°κ° λ‘컬 λ°μ΄ν°λ² μ΄μ€μ μμ νκ² μ μ₯λλ€λ κ²μ μλ―Ένλ€.
- Modifiedλ μμ ν νμΌμ μμ§ λ‘컬 λ°μ΄ν°λ² μ΄μ€μ 컀λ°νμ§ μλ κ²μ λ§νλ€.
- Stagedλ νμ¬ μμ ν νμΌμ 곧 컀λ°ν κ²μ΄λΌκ³ νμν μνλ₯Ό μλ―Ένλ€.
- μ΄ μΈ κ°μ§ μνλ Git νλ‘μ νΈμ μΈ κ°μ§ λ¨κ³μ μ°κ²°λΌ μλ€. Git λλ ν°λ¦¬, μνΉ λλ ν°λ¦¬, Staging Area μ΄λ κ² μΈ κ°μ§ λ¨κ³μ΄λ€.
- Git λλ ν°λ¦¬λ Gitμ΄ νλ‘μ νΈμ λ©νλ°μ΄ν°μ κ°μ²΄ λ°μ΄ν°λ² μ΄μ€λ₯Ό μ μ₯νλ κ³³μ λ§νλ€. μ΄ λλ ν°λ¦¬κ° Gitμ ν΅μ¬μ΄λ€.
- μνΉ λλ ν°λ¦¬λ νλ‘μ νΈμ νΉμ λ²μ μ Checkoutν κ²μ΄λ€.
- Staging Areaλ Git λλ ν°λ¦¬μ μλ€. λ¨μν νμΌμ΄κ³ 곧 컀λ°ν νμΌμ λν μ 보λ₯Ό μ μ₯νλ€.
- GitμΌλ‘ νλ μΌμ κΈ°λ³Έμ μΌλ‘ μλμ κ°λ€.
- μνΉ λλ ν°λ¦¬μμ νμΌμ μμ νλ€.
- Staging Areaμ νμΌμ Stageν΄μ 컀λ°ν μ€λ μ·μ λ§λ λ€.
- Staging Areaμ μλ νμΌλ€μ 컀λ°ν΄μ Git λλ ν°λ¦¬μ μꡬμ μΈ μ€λ μ·μΌλ‘ μ μ₯νλ€.
- Git λλ ν°λ¦¬μ μλ νμΌλ€μ Committed μνμ΄λ€.
- νμΌμ μμ νκ³ Staging Areaμ μΆκ°νλ€λ©΄ Stagedμ΄λ€.
- Checkoutνκ³ λμ μμ νμ§λ§, μμ§ Staging Areaμ μΆκ°νμ§ μμμΌλ©΄ Modifiedμ΄λ€.
π CLIβ
- Gitμ λͺ¨λ κΈ°λ₯μ μ§μνλ κ²μ CLI(Command Line Interface)λΏμ΄λ€.
π Git μ€μΉβ
π Git μ΅μ΄ μ€μ β
- Gitμ μ¬μ© νκ²½μ μ μ νκ² μ€μ ν΄ μ£Όμ΄μΌ νλ€.
git config
λΌλ λκ΅¬λ‘ μ€μ λ΄μ©μ νμΈνκ³ λ³κ²½ν μ μλ€. Gitμ μ΄ μ€μ μ λ°λΌ λμνλ€.
- /etc/gitconfig νμΌ
- μμ€ν μ λͺ¨λ μ¬μ©μμ λͺ¨λ μ μ₯μμ μ μ©λλ μ€μ μ΄λ€.
git config --system
μ΅μ μΌλ‘ μ΄ νμΌμ μ½κ³ μΈ μ μλ€.- ~/.gitconfig, ~/.config/git/config νμΌ
- νΉμ μ¬μ©μμκ²λ§ μ μ©λλ μ€μ μ΄λ€.
git config --global
μ΅μ μΌλ‘ μ΄ νμΌμ μ½κ³ μΈ μ μλ€.- .git/config νμΌ
- Git λλ ν°λ¦¬μ μκ³ νΉμ μ μ₯μμλ§ μ μ©λλ€.
- κ° μ€μ μ μμμΌλ‘ μ°μ μλλ€.
π₯ μ¬μ©μ μ 보β
- Gitμ 컀λ°ν λ μ¬μ©μ μ΄λ¦κ³Ό μ΄λ©μΌ μ£Όμλ₯Ό μ¬μ©νλ€. νλ² μ»€λ°ν νμλ μ 보λ₯Ό λ³κ²½ν μ μλ€.
> git config --global user.name "John Doe"
> git config --global user.email "John@example.com"
- λ¨ ν λ²λ§
--global
λ‘ μ€μ νλ©΄ λλ€.
π₯ νΈμ§κΈ°β
- ν μ€νΈ νΈμ§κΈ°λ₯Ό κ³ λ₯Ό μ μλ€. κΈ°λ³Έ νΈμ§κΈ°λ Viλ Vimμ΄λ€.
> git config --global core.editor emacs
π₯ μ€μ νμΈβ
git config --list
λͺ λ Ήμ μ€ννλ©΄ μ€μ ν λͺ¨λ κ²μ 보μ¬μ€λ€.
π₯ λμλ§ λ³΄κΈ°β
> git help <verb>
> git <verb> --help
> man git-<verb>