λ€μ΄κ°λ©°
μ΄λ² ν¬μ€ν
μμλ μ μ₯μλ₯Ό λ§λ€κ³ μ€μ νλ λ°©λ², νμΌμ μΆμ (Track
)νκ±°λ μΆμ μ κ·Έλ§ λλ λ°©λ²μ λν΄ μμ λ³΄κ² μ΅λλ€ !
Gitμ κΈ°μ΄
Git μ μ₯μ λ§λ€κΈ°
Git
μ μ μ₯μλ₯Ό λ§λλ λ°©λ²μ λ κ°μ§ μ
λλ€.
- κΈ°μ‘΄ νλ‘μ νΈλ λλ ν 리λ₯Ό
Git
μ μ₯μλ‘ λ§λλ λ°©λ² - λ€λ₯Έ μλ²μ μλ μ μ₯μλ₯Ό
Clone
νλ λ°©λ²
κΈ°μ‘΄ λλ ν 리λ₯Ό Git μ μ₯μλ‘ λ§λλ λ°©λ²
κΈ°μ‘΄μ νλ‘μ νΈλ₯Ό Git
μΌλ‘ κ΄λ¦¬νκ³ μΆλ€λ©΄, νλ‘μ νΈμ λλ ν λ¦¬λ‘ μ΄λν΄μ μλμ λͺ
λ Ήμ΄λ₯Ό μ€ννλ©΄ λ©λλ€.
$ git init
μμ λͺ
λ Ήμ΄λ .git
μ΄λΌλ νμ λλ ν 리λ₯Ό λ§λ€κ² λ©λλ€. (νμ§λ§ μ΄ λͺ
λ Ήλ§λλ‘λ μμ§ νλ‘μ νΈμ μ΄λ ν κ΄λ¦¬λ νμ§ μμ΅λλ€ !)
κΈ°μ‘΄ μ μ₯μλ₯Ό Clone νκΈ°
λ€λ₯Έ νλ‘μ νΈμ μ°Έμ¬νλ €νκ±°λ(contribute
) Git
μ μ₯μλ₯Ό 볡μ¬νκ³ μΆμ λ git clone
λͺ
λ Ήμ΄λ₯Ό μ¬μ©ν©λλ€.
git
μ μλ²μ μλ κ±°μ λͺ¨λ λ°μ΄ν°λ₯Ό 볡μ¬νκ² λ©λλ€. (νλ‘μ νΈμ νμ€ν 리κΉμ§ !)
$ git clone url myName
μμ κ°μ΄ λͺ
λ Ήμ΄λ₯Ό μ
λ ₯νλ©΄ ν΄λΉ νλ‘μ νΈλ₯Ό λ€λ₯Έ μ΄λ¦μΌλ‘ clone
ν μ μμ΅λλ€.
μμ νκ³ μ μ₯μμ μ μ₯νκΈ°
λ¨Όμ μμ git directory
μ νμΌμ΄ μ°μ¬μ§λ κ³Όμ μ λ¨Όμ μμλ³΄κ² μ΅λλ€.
Working Directory
μ λͺ¨λ νμΌμ ν¬κ² Tracked(κ΄λ¦¬λμ)
μ Untracked(κ΄λ¦¬λμμ΄ μλ)
μΌλ‘ λλ μ§λλ€.
Tracked
νμΌμ μ΄λ―Έ μ€λ
μ·μ ν¬ν¨λμ΄μλ νμΌμ΄λ©° Unmodified(μμ νμ§ μμ)
μ Modified(μμ ν¨)
, Staged(컀λ°μΌλ‘ μ μ₯μμ κΈ°λ‘)
νλ μνλ‘ λλ μ§λλ€. κ·Έλ¦¬κ³ λλ¨Έμ§λ λͺ¨λ Untracked
νμΌμ
λλ€.
μ¦, Untracked
νμΌμ Working Directory
μ μλ νμΌ μ€ μ€λ
μ·μλ, Staging Are
a`μλ ν¬ν¨λμ§ μμ νμΌμ
λλ€.
μ²μ μ μ₯μλ₯Ό Clone
νλ©΄ λͺ¨λ νμΌμ Tracked
μ΄λ©΄μ Unmodified
μνμ
λλ€.
λμκ° λ§μ§λ§ μ»€λ° μ΄ν μ무κ²λ μμ νμ§ μμ μνμμ μ΄λ€ νμΌμ μμ νκ²λλ©΄ κ·Έ νμΌμ Modified
μνκ° λ©λλ€.
μ€μ λ‘ μ»€λ°μ νκΈ° μν΄μλ μ΄ μμ ν νμΌμ Staged μνλ‘ λ§λ€κ³ , Staged
μνμΈ νμΌμ 컀λ°ν©λλ€.
μμ λ₯Ό ν΅ν΄ 곡λΆνκΈ°
μ΄μ λ νμΌμ μμ νκ³ νμΌμ μ€λ μ·μ 컀λ°ν΄λ³΄κ² μ΅λλ€~! (μ€μ΅ !!)
λ¨Όμ ! λΉ λλ ν 리λ₯Ό λ§λ€μ΄λ³΄κ² μ΅λλ€.
$ mkdir git_pratice
μ΄ λλ ν 리λ₯Ό git director
yλ‘ μ¬μ©νκΈ° μν΄ μ΄κΈ°νλ₯Ό ν΄μ€λλ€.
$ git init
νμΌμ μν νμΈνκΈ°
Git
μ΄κΈ°νλ₯Ό μμΌμ£Όκ³ λ¨Όμ μνλ₯Ό νμΈν΄μ€λλ€.
$ git status
μμ λ΄μ©μ νμΌμ νλλ μμ νμ§ μμλ€λ κ²μ λ§ν΄μ€λλ€. Tracked
λ Modified
μνμΈ νμΌμ΄ μλ€λ μλ―Έμ
λλ€.
κ·Έλ κΈ° λλ¬Έμ μλ‘κ² νμΌμ λ§λ€κ³ μνλ₯Ό νμΈν΄λ³΄κ² μ΅λλ€.
$ touch pratice_1.md
$ git status
pratice_1.md
νμΌμ΄ UnTracked files
λΆλΆμ μν΄ μμ΅λλ€. μ¦, Git
μ Untracked
νμΌμ μμ§ μ»€λ°μ λ£μ΄μ§μ§ μμ νμΌμ΄λΌκ³ 보λ κ²μ
λλ€.
νμΌμ μΆμ νκΈ°
Git
μ΄ νμΌμ μΆμ νκ² λ§λ€κΈ° μν΄ add
λͺ
λ Ήμ΄λ₯Ό μ€ννκ³ μνλ₯Ό νμΈν΄λ³΄κ² μ΅λλ€.
$ git add pratice_1.md
$ git status
Tracked
μνμ΄λ©΄μ 컀λ°μ μΆκ°λ Staged
μνλΌλ κ²μ νμΈν μ μμ΅λλ€.
Changes to be committed
μ λ€μ΄ μλ νμΌμ Staged
μνλΌλ κ²μ μλ―Έν©λλ€. 컀λ°νκ²λλ©΄ git add
λ₯Ό μ€νν μμ μ νμΌμ΄ 컀λ°λμ΄ μ μ₯μ νμ€ν 리μ λ¨κ²λ©λλ€.
μ΄ λͺ λ Ήμ ν΅ν΄ λλ ν 리μ μλ νμΌμ μΆμ νκ³ κ΄λ¦¬ν μ μμ΅λλ€.
Modifed μνμ νμΌ Staged νκΈ°
μ΄λ―Έ Tracked
μνμΈ νμΌμ μμ νλ λ²μ μμλ³΄κ² μ΅λλ€.
λ¨Όμ pratice_1.md
νμΌμ μμ ν μνλ₯Ό νμΈν΄λ³΄κ² μ΅λλ€!
$ vim ./pratice_1.md
$ git status
Changed not staged for commit
μ΄λΌλ μνλ μμ ν νμΌμ΄ Tracked
μνμ΄μ§λ§ μμ§ Staged
μνλ μλλΌλ λ»μ
λλ€. Staged
μνλ‘ λ§λ€κ³ μΆλ€λ©΄ git add
λͺ
λ Ήμ μ€νν΄μΌ ν©λλ€.
addμ μλ―Έλ νλ‘μ νΈμ νμΌμ μΆκ°νλ€κΈ° λ³΄λ€ λ€μ 컀λ°μ μΆκ°νλ€κ³ μκ°νλκ² μ’μ΅λλ€.
add
λͺ
λ Ήμ΄λ₯Ό μ€ννμ¬ Staged
μνλ‘ λ§λ€κ³ μνλ₯Ό νμΈν΄λ³΄κ² μ΅λλ€.
$ git add ./pratice_1.md
$ git status
μ§κΈ μ΄ μμ μμ 컀λ°μ νλ©΄ git commit
λͺ
λ Ήμ μ€ννλ μμ μ λ²μ μ΄ μ»€λ°λλ κ²μ΄ μλλΌ λ§μ§λ§μΌλ‘ git add
λͺ
λ Ήμ μ€ννμ λμ λ²μ μ΄ μ»€λ°λ©λλ€. μ¦, git add
λͺ
λ Ήμ ν ν λ νμΌμ μμ νλ©΄ git add
λͺ
λ Ήμ λ€μ μ€νν΄μ μ΅μ λ²μ μ Staged
μνλ‘ λ§λ€μ΄μΌ ν©λλ€!
νμΌ μνλ₯Ό 지λ§νκ² νμΈνκΈ°
git status
λͺ
λ ΉμΌλ‘ νμΈν μ μλ λ΄μ©μ΄ λ§κΈ° λλ¬Έμ μ‘°κΈ λ κ°λ¨νκ² λ³΄μ¬μ£Όλ μ΅μ
μ΄ μμ΅λλ€.
$ git status -s
μμ§ μΆμ νμ§ μμ μ νμΌ μμλ ??
νμκ° λΆμ΅λλ€. Staged
μνλ‘ νΈκ°ν νμΌ μ€ μλ‘ μμ±ν νμΌ μμλ A
νμκ°, μμ ν νμΌμλ M
νμκ° λΆμ΅λλ€.
νμΌ λ¬΄μνκΈ°
λ³΄ν΅ λ‘κ·ΈνμΌμ΄λ λΉλ μμ€ν
μ΄ μλμΌλ‘ μμ±ν νμΌλ€μ Git
μ΄ κ΄λ¦¬ν νμκ° μμ΅λλ€.
κΌ μμ κ°μ νμΌ λΏλ§μλλΌ Git
μΌλ‘ κ΄λ¦¬ν νμκ° μλ€κ³ μκ°λλ νμΌλ€μ .gitignore
νμΌμ λ§λ€κ³ κ·Έμμ 무μν νμΌμ ν¨ν΄μ μ μ΅λλ€.
$ touch .gitignore
$ cat .gitingnore
.gitignore
νμΌμ μλμ κ·μΉμ λ°λ¦
λλ€.
- μ무κ²λ μλ λΌμΈμ΄λ,
#
μΌλ‘ μμνλ λΌμΈμ 무μν©λλ€. - νμ€
Glob
ν¨ν΄μ μ¬μ©ν©λλ€. - μ¬λμ (
/
)λ‘ μμνλ©΄ νμ λλ ν 리μ μ μ©λμ§ μμ΅λλ€. - λλ ν 리λ μ¬λμλ₯Ό λμ μ¬μ©νλ κ²μΌλ‘ ννν©λλ€.
- λλνλ‘ μμνλ ν¨ν΄μ νμΌμ 무μνμ§ μμ΅λλ€.
# νμ₯μκ° .aμΈ νμΌ λ¬΄μ
*.a
# μ λΌμΈμμ νμ₯μκ° .aμΈ νμΌμ 무μνκ² νμ§λ§ lib.aλ 무μνμ§ μμ
!lib.a
# νμ¬ λλ ν 리μ μλ TODO νμΌμ 무μνκ³ subdir/TODOμ²λΌ νμ λλ ν 리μ μλ νμΌμ 무μνμ§ μμ
/TODO
# build/ λλ ν 리μ μλ λͺ¨λ νμΌμ 무μ
build/
# doc/notes.txt νμΌμ 무μνκ³ doc/server/arch.txt νμΌμ 무μνμ§ μμ
doc/*.txt
# doc λλ ν 리 μλμ λͺ¨λ .pdf νμΌμ 무μ
doc/**/*.pdf
Staged μ Unstaged μνμ λ³κ²½ λ΄μ©μ 보기
λ¨μν νμΌμ΄ λ³κ²½λλ€λ μ¬μ€μ΄ μλλΌ μ΄λ€ λ΄μ©μ΄ λ³κ²½λλμ§ μ΄ν΄λ³΄λ €λ©΄ git status λͺ λ Ήμ΄ μλλΌ git diff λͺ λ Ήμ μ¬μ©νλ©΄ λ©λλ€. λ³΄ν΅ Staged νμΌμΈ κ²κ³Ό μλκ²λ§ νμ ν΄λ λκΈ° λλ¬Έμ git statusμΌλ‘ μΆ©λΆν©λλ€. λ μμΈνκ² λ³Ό λλ git diff λͺ λ Ήμ μ¬μ©νλλ° Patchμ²λΌ μ΄λ€ λΌμΈμ μΆκ°νκ³ μμ νλμ§κ° κΆκΈν λ μ¬μ©ν©λλ€.
$ git diff
git diff λ Unstaged μνμΈ κ²λ€λ§ 보μ¬μ€λλ€. κ·Έλ κΈ° λλ¬Έμ μμ ν νμΌμ λͺ¨λ Staging Areaμ λ£λλ€λ©΄ git diff λͺ λ Ήμ μ무κ²λ 보μ¬μ£Όμ§ μμ΅λλ€.