Β
1. Gitμ΄λ?2. Git μ€μΉνκΈ°2-1. Ubuntuμμ μ€μΉνκΈ°2-2. Macμμ μ€μΉνκΈ°2-2-1. zipνμΌ λ€μ΄λ°μ μ€μΉνκΈ°2-2-2. homebrewλ‘ μ€μΉνκΈ°2-3. Windowsμμ μ€μΉνκΈ°3. λ²μ νμΈ λ° μ΄κΈ° μ€μ 4. μ μ₯μ λ§λ€κΈ°5. First commit!5.1. μΆκ°νκ³ μ»€λ°νκΈ°(add, commit)5.1.1. gitμ΄ κ΄λ¦¬ν λμμ νμΌ λ±λ‘νκΈ°(add)5.1.2. λ²μ λ§λ€κΈ° (commit)5.2. μν νμΈνλ λ°©λ² (status , diff , log)5.2.1. νμΌ μν νμΈνκΈ° (status)5.2.2. λ³κ²½μ¬ν νμΈνκΈ° (diff)5.2.3. 컀λ°(commit) νμ€ν 리 μ‘°ννκΈ° (log)5.3. μ μ₯μμ 무μν νμΌ μ€μ νλ λ°©λ²5.3.1. 무μν νμΌ (gitignore) μΆκ° νκΈ°
1. Gitμ΄λ?
- Gitμ μμ€μ½λ λ° νμΌμ λ³κ²½λ΄μμ μ μ₯νλ λΆμ° λ²μ κ΄λ¦¬ μμ€ν μ λλ€.
- 리λμ€ ν λ°μ¦μ μν΄ μ²μ λ§λ€μ΄μ‘μ΅λλ€. 리λ μ€ μ»€λμ λ§λμ λΆμ΄μλλ€.
- GitHub, Bitbucket, Gitlab λ±μ Git κΈ°λ° λ²μ κ΄λ¦¬ νΈμ€ν μλΉμ€λ€μ΄ μμ΅λλ€.
- <μΆμ² μμ >
- (무λ£, 곡μ) ProGit
- (μ λ£) ν κ°λ°μ μν Git, GitHub μμνκΈ°
- <μΆμ² κ°μ>
- (무λ£) μ§μ₯μμ μ¨ κΉ
- (μ λ£) ν κ°λ°μ μν Git, GitHub μ λ¬Έ
- (μ λ£, μ¬ν) μ λλ‘ νλ Git & GitHub - by μμ½
- 곡μλ¬Έμ
- help λͺ λ Ήμ΄
git help -a : μμΈν λͺ λ Ήμ΄λ€ μ΄ν΄λ³΄κΈ° git λͺ λ Ήμ΄ -h : λͺ λ Ήμ΄ μ΅μ 보기 git help λͺ λ Ήμ΄ : webμμ ν΄λΉ λͺ λ Ήμ΄ μμΈλ³΄κΈ°
- gitμ κΈ°λ³Έ μλν° λ³κ²½
git config --global core.editor "editorμ΄λ¦" git config --global core.editor "code --wait" #VSCλ₯Ό κΈ°λ³Έ μλν°λ‘ μ€μ , waitμ ν΄μ£Όμ΄μΌ μ μ λ©μΆμλ€κ° VSCμ μ΄λ¦° code μμ μ°½μ λ«μΌλ©΄ CLIκ° μ§μ μ€νλλ νλ‘μΈμ€λ‘ μ§νλ©λλ€.
- gitμ κΈ°λ³Έ μ€μ λ³κ²½
git config global -e #global μ€μ μ λλ€. λ§μ§μ€ λ μ μν΄μ£ΌμΈμ.
- λͺ λ Ήμ΄ μ°μ΅ μ¬μ΄νΈ
2. Git μ€μΉνκΈ°
2-1. Ubuntuμμ μ€μΉνκΈ°
μλ λͺ
λ Ήμ΄λ₯Ό μ
λ ₯νμ¬ Gitμ μ€μΉν μ μμ΅λλ€.
$ sudo apt-get update $ sudo apt-get install git
Β
2-2. Macμμ μ€μΉνκΈ°
Macμλ κΈ°λ³Έμ μΌλ‘ Gitμ΄ μ€μΉλμ΄ μμ΅λλ€. λ²μ μ λ°λΌ μ€μΉκ° μλμ΄ μλ κ²½μ°λ μμ΅λλ€. μ€μΉκ° λμλμ§ νμΈνκΈ° μν΄μλ ν°λ―Έλ μ°½(cmd + spacebar β terminal)μ μλμ λͺ
λ Ήμ΄λ₯Ό μ
λ ₯ν©λλ€.
$ git usage: git [--version] [--help] [-C <path>] [-c <name>=<value>] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path] ...
Β
2-2-1. zipνμΌ λ€μ΄λ°μ μ€μΉνκΈ°
μ€μΉκ° λμ§ μμ κ²½μ°λ μ΅μ λ²μ μ gitμ μ€μΉνκ³ μΆμ κ²½μ° μλμ μμλλ‘ μ§νν©λλ€.
- https://git-scm.com/ μ μν©λλ€.
- Download for Mac λ²νΌμ ν΄λ¦ν©λλ€.
- λ€μ΄ λ°μ νμΌμ μ€νν©λλ€.
Β
- λ§₯λΆ μ¬μ©νμλ λΆλ€ μ€
missing xcrun
μ€λ₯ λ¨μλ©΄ μλ κΈ μ°Έκ³ ν΄μ£ΌμΈμ!
Β
2-2-2. homebrewλ‘ μ€μΉνκΈ°
homebrewλ‘ git μ€μΉνκΈ°Β
2-3. Windowsμμ μ€μΉνκΈ°
- https://git-scm.com/ μ μν©λλ€.
- Download for Windows λ²νΌμ ν΄λ¦νλ©΄ μλμ κ°μ νμ΄μ§κ° μ΄λ¦¬λλ° Click here to downloadλ₯Ό λλ¬μ£ΌμΈμ. Portableμ 무μ€μΉ λ²μ μ λλ€.
- λ€μ΄ λ°μ νμΌμ μ€νν©λλ€. (μ€μΉ μ΅μ μ€ κΈ°λ³Έ λΈλμΉλ₯Ό mainμΌλ‘ λ°κΎΈλ μ΅μ μ΄ μμ΅λλ€. μ΄λ―Έ Gitμ μ΄λμ λ μμ§νμ λΆμ΄λΌλ©΄ μλ κ²μ ν΄λ¦ν΄μ μ§νν΄μ£ΌμΈμ. μμ μ λͺ¨λ μ΅μ μ λ³κ²½νμ§ μκ³ κ·Έλλ‘ μ§νν©λλ€.)
git config --global init.defaultbBranch main
μΌλ‘ μΆν λ³κ²½ κ°λ₯ν©λλ€.
3. λ²μ νμΈ λ° μ΄κΈ° μ€μ
λ€μ΄ λ°μ Git λ²μ μ νμΈν μ μμ΅λλ€.
$ git --version git version 2.37.3
Β
Gitμ μ¬μ©νκΈ° μν΄ μ¬μ©μ μ 보λ₯Ό μ€μ ν©λλ€. μ€μ μ μ λλ‘ νλμ§ νμΈνκΈ° μν΄μ list λͺ
λ Ήμ΄λ₯Ό μ¬μ©ν μ μμ΅λλ€. (get λͺ
λ Ήμ΄λ₯Ό μ¬μ©νμ
λ λ©λλ€.)
ν΄λΉ μ μ°¨λ₯Ό μ§ννμ§ μμΌλ©΄ λ€μ push κ° μλ μ μμ΅λλ€.
$ git config --global user.name "hojun.lee" $ git config --global user.email email@example.com $ git config --list
$ git config --get user.name $ git config --get user.email
μ΄λ, email μ€μ κ³Ό username μ€μ μ μ λλ‘ μν΄μ£Όμλ©΄ 컀λ°λ΄μμμ κ³μ μ΄λ¦μ΄ μλ μ μ μ΄λ¦μ΄ μ¬λΌκ° μλ μμ΅λλ€.
- GitHubμ λ¨Όμ κ°μ νμ ¨λ€λ©΄ GitHubμ μλ μ£Όμλ‘ νμΈμ. μ΄ μ±ν°μμ GitHubμ κ°μ νμμ§ μμΌμ ¨μ΄λ μ§ννλλ° λ¬΄λ¦¬κ° μμ΅λλ€. μ¬λ¬λΆ μ΄λ¦κ³Ό μ΄λ©μΌμ μ λ ₯ν΄μ£ΌμΈμ. μ΄λ νμ ν λ λκ° μμ νλμ§λ₯Ό λνλ λλ€.
Β
- VSCμμ μ¬μ©νμ€ κ²μ΄λΌλ©΄ Ctrl + Shift + Pλ₯Ό λλ¬ Terminal: Select Default Profileμ git bashλ‘ λ³κ²½ν΄μ£ΌμΈμ.
4. μ μ₯μ λ§λ€κΈ°
- μμ ν λλ ν 리λ₯Ό λ§λ€κ³ (mkdir) μμ±ν λλ ν λ¦¬λ‘ μ΄λνκΈ°(cd)
$ mkdir git-test $ cd git-test
Β
- νμ¬ λλ ν 리λ₯Ό Git μ μ₯μλ‘ λ§λ€μ΄ μνλ λλ ν 리λ₯Ό κΈ°μ€μΌλ‘ λ²μ κ΄λ¦¬λ₯Ό ν©λλ€.
$ git init
Β
git init
μ μ
λ ₯νλ©΄ ν΄λΉ ν΄λ κΈ°μ€μΌλ‘ .git(λ‘컬 μ μ₯μ)κ° μμ±λ©λλ€. λ‘컬 μ μ₯μμλ λ²μ μ 보, μ격 μ μ₯μ μ£Όμκ° μ μ₯λ©λλ€.μ΄λ, ν ν΄λμλ νλμ .git(λ‘컬 μ μ₯μ)μ κ°μ ΈμΌ ν©λλ€. κ·Έλ μ§ μμ κ²½μ° μΆ©λμ΄ λ°μν μ μμ΅λλ€.
5. First commit!
5.1. μΆκ°νκ³ μ»€λ°νκΈ°(add, commit)
- νμΌμ μμ±(touch), μΆκ°(add)νκ³ μ»€λ°(commit)νκΈ°
- μλ μ½λλ₯Ό μ λ ₯ λ° μ€ννκ³ , μ΄μ΄ μ€λͺ νλλ‘ νκ² μ΅λλ€.
$ touch README.md $ git status # Untracked νμΈ $ git add README.md $ git commit -m "first commit"
5.1.1. gitμ΄ κ΄λ¦¬ν λμμ νμΌ λ±λ‘νκΈ°(add)
λ³κ²½ν νμΌ λͺ©λ‘ μ€ μ€ν
μ΄μ§μ μ¬λ¦¬κΈ° μνλ νμΌλ§ μ νν©λλ€. νμΌ μ 체λ₯Ό μ¬λ¦¬κ³ μΆμ κ²½μ°μλ
git add
λ€μ .
μ μ
λ ₯ν©λλ€(git add .
). μ΄ λ, μ€νμ΄μ€ λ°κ° ν μΉΈ λ€μ΄κ° λ€λ μ μ μμ§λ§μΈμ!$ git add README.md // μ§μ νμΌ μ¬λ¦¬κΈ° $ git add . // νμΌ μ 체 μ¬λ¦¬κΈ°
Untracked β Unmodified β Modefied β Staged
|ββββββ git add ββββββββ|
| ββββ git commit ββ|
(κ°κ° μνμ λν μμΈ μ€λͺ
μ 5.2 μ±ν°μ μμ΅λλ€.)
5.1.2. λ²μ λ§λ€κΈ° (commit)
$ git commit -m "μ μ₯ λ©μΈμ§λ₯Ό μ λ ₯ν΄μ£ΌμΈμ"
5.2. μν νμΈνλ λ°©λ² (status
, diff
, log
)
5.2.1. νμΌ μν νμΈνκΈ° (status
)
$ git status
Β
νμΌμ μνμ λ°λΌ Untracked μ Tracked λ‘ λΆλ₯λ©λλ€.
1) Untracked(κ΄λ¦¬ λμμ΄ μλ) : νμΌ μμ± ν νλ²λ
git add
νμ§ μμ μνλ₯Ό λ§ν©λλ€.2) Tracked(κ΄λ¦¬ λμμ) : gitμ΄ κ΄λ¦¬νλ νμΌμμ μλ―Έν©λλ€.
Unmodified
: μ΅κ·Όμ 컀λ°κ³Ό λΉκ΅νμ λ λ°λ λ΄μ©μ΄ μλ μν
Modified
: μ΅κ·Ό 컀λ°κ³Ό λΉκ΅νμ λ λ°λ λ΄μ©μ΄ μλ μν
Staged
: νμΌμ΄ μμ λκ³ λμ μ€ν μ΄μ§ 곡κ°μ μ¬λΌμ μλ μνμ΄λ©°,git add
νμ μν
Β
μλμ κ·Έλ¦Όμ ν΅ν΄ λ‘컬 μ μ₯μμ μ격 μ μ₯μ μ¬μ΄μ νμΌ μ΄λ κ²½λ‘ λ° μνλ₯Ό νμΈνκ³ μ΄λ€ λͺ
λ Ήμ΄κ° μ¬μ©λλμ§ μ΄ν΄λ³΄μΈμ!
Β
5.2.2. λ³κ²½μ¬ν νμΈνκΈ° (diff
)
addνκΈ° μ
μ΅κ·Ό commitν λ΄μ©κ³Ό νμ¬ ν΄λμ λ³κ²½ μ¬νμ νμΈν μ μμ΅λλ€.$ git diff
Β
5.2.3. 컀λ°(commit) νμ€ν 리 μ‘°ννκΈ° (log
)
$ git log
μμ κ°μ΄
git log
λͺ
λ Ήμ΄λ₯Ό μ
λ ₯νλ©΄, μ΅κ·Ό 컀λ°ν νμ€ν 리λ₯Ό νμΈν μ μμ΅λλ€. μ΄ log
λͺ
λ Ήμ΄μ λν λ μμΈν λ΄μ©μ λΆλ‘μ βGitHub log μ΅μ
β μμ μ΄ν΄λ³΄κ² μ΅λλ€.λ‘κ·Έκ° κΈΈ κ²½μ°
q
λ₯Ό λλ₯΄μλ©΄ λ°μΌλ‘ λΉ μ Έλμ΅λλ€. j
μ, k
λ μλλ‘ μ΄λν μ μμ΅λλ€.5.3. μ μ₯μμ 무μν νμΌ μ€μ νλ λ°©λ²
5.3.1. 무μν νμΌ (gitignore) μΆκ° νκΈ°
1)
.gitignore
μ¬μ©νκΈ°push μ
.gitignore
νμΌμ λ²μ κ΄λ¦¬μμ μ μΈν νμΌμ μΆκ°ν©λλ€.# a comment - μ΄ μ€μ 무μνλ€. # νμ₯μκ° .aμΈ νμΌ λ¬΄μ *.a # μ μ€μμ νμ₯μκ° .aμΈ νμΌμ 무μνκ² νμ§λ§ lib.aλ 무μνμ§ μλλ€. !lib.a # λ£¨νΈ λλ ν 리μ μλ TODOνμΌμ 무μνκ³ subdir/TODOμ²λΌ νμλλ ν 리μ μλ νμΌμ 무μνμ§ μλλ€. /TODO # build/ λλ ν 리μ μλ λͺ¨λ νμΌμ 무μνλ€. build/ # `doc/notes.txt`κ°μ νμΌμ 무μνκ³ doc/server/arch.txtκ°μ νμΌμ 무μνμ§ μλλ€. doc/*.txt # `doc` λλ ν 리 μλμ λͺ¨λ .txt νμΌμ 무μνλ€. doc/**/*.txt
Β
2)
.gitignore
μλ μμ±κΈ° νμ©νκΈ°.gitignore
νμΌμ μ§μ μμ±ν΄μΌ νλ κ²½μ°κ° μ’
μ’
μμ΅λλ€. μ΄ λ, λΌμ΄λΈλ¬λ¦¬μ νλ μμν¬λ₯Ό μ¬μ©νλ κ²½μ°μλ μ΄λ€ νμΌμ κΉ λ²μ κ΄λ¦¬μμ μ μΈ μμΌμΌ νλμ§(.gitignore
νμΌμ λ£μ΄μΌ λλμ§) ν·κ°λ¦¬λ κ²½μ°κ° μμ£ . νΉμ μΌμΌμ΄ μμ±νκΈ° λ²κ±°λ‘μ΄ κ²½μ°λ μμ΅λλ€. μ΄λ΄ λ νΈνκ² μ¬μ©ν μ μλ ν΄μΈ gitingnore.io λ₯Ό νμ©ν΄λ³΄μΈμ!.gitignore
μ¬μ© λ°©λ²
1) μ λ§ν¬μ μ μ ν λ³ΈμΈμ νλ‘μ νΈμμ μ¬μ©νλ μ΄μ체μ , κ°λ° νκ²½, κΈ°μ μ€νμ μμ±ν©λλ€.
2)
μμ±
λ²νΌμ λλ¬ λ΄μ©μ μμ±ν ν, μ 체 λ΄μ©μ 볡μ¬νκ³ .gitignore
νμΌμ μΆκ°ν©λλ€.Β