-
1. ģģķźø°
- 1.1 ė²ģ ź“리ė?
- 1.2 ģ§§ź² ė³“ė Gitģ ģģ¬
- 1.3 Git źø°ģ“
- 1.4 CLI
- 1.5 Git ģ¤ģ¹
- 1.6 Git ģµģ“ ģ¤ģ
- 1.7 ėģė§ ė³“źø°
- 1.8 ģģ½
-
2. Gitģ źø°ģ“
- 2.1 Git ģ ģ„ģ ė§ė¤źø°
- 2.2 ģģ ķź³ ģ ģ„ģģ ģ ģ„ķźø°
- 2.3 ģ»¤ė° ķģ¤ķ 리 ģ”°ķķźø°
- 2.4 ėė리기
- 2.5 ė¦¬ėŖØķø ģ ģ„ģ
- 2.6 ķź·ø
- 2.7 Git Alias
- 2.8 ģģ½
-
3. Git ėøėģ¹
- 3.1 ėøėģ¹ė 묓ģģøź°
- 3.2 ėøėģ¹ģ Merge ģ źø°ģ“
- 3.3 ėøėģ¹ ź“리
- 3.4 ėøėģ¹ ģķ¬ķė”
- 3.5 ė¦¬ėŖØķø ėøėģ¹
- 3.6 Rebase ķźø°
- 3.7 ģģ½
-
4. Git ģė²
- 4.1 ķė”ķ ģ½
- 4.2 ģė²ģ Git ģ¤ģ¹ķźø°
- 4.3 SSH ź³µź°ķ¤ ė§ė¤źø°
- 4.4 ģė² ģ¤ģ ķźø°
- 4.5 Git ė°ėŖ¬
- 4.6 ģ¤ė§ķø HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 ė ė¤ė„ø ģ ķģ§, ķøģ¤ķ
- 4.10 ģģ½
-
5. ė¶ģ° ķź²½ģģģ Git
-
6. GitHub
-
7. Git ėźµ¬
- 7.1 리ė¹ģ ģ”°ķķźø°
- 7.2 ėķķ ėŖ ė ¹
- 7.3 Stashingź³¼ Cleaning
- 7.4 ė“ ģģ ģ ģėŖ ķźø°
- 7.5 ź²ģ
- 7.6 ķģ¤ķ 리 ėØģ„ķźø°
- 7.7 Reset ėŖ ķķ ģź³ ź°źø°
- 7.8 ź³ źø Merge
- 7.9 Rerere
- 7.10 Gitģ¼ė” ė²ź·ø 찾기
- 7.11 ģėøėŖØė
- 7.12 Bundle
- 7.13 Replace
- 7.14 Credential ģ ģ„ģ
- 7.15 ģģ½
-
8. Gitė§ģ¶¤
- 8.1 Git ģ¤ģ ķźø°
- 8.2 Git Attributes
- 8.3 Git Hooks
- 8.4 ģ ģ± źµ¬ķķźø°
- 8.5 ģģ½
-
9. Gitź³¼ ģ¬ķ ė²ģ ź“리 ģģ¤ķ
- 9.1 Git: ė²ģ© Client
- 9.2 Gitģ¼ė” ģ®źø°źø°
- 9.3 ģģ½
-
10. Gitģ ė“ė¶
- 10.1 Plumbing ėŖ ė ¹ź³¼ Porcelain ėŖ ė ¹
- 10.2 Git ź°ģ²“
- 10.3 Git Refs
- 10.4 Packfile
- 10.5 Refspec
- 10.6 ė°ģ“ķ° ģ ģ” ķė”ķ ģ½
- 10.7 ģ“ģ ė° ė°ģ“ķ° ė³µźµ¬
- 10.8 ķź²½ė³ģ
- 10.9 ģģ½
-
A1. ė¶ė” A: ė¤ģķ ķź²½ģģ Git ģ¬ģ©ķźø°
- A1.1 GUI
- A1.2 Visual Studio
- A1.3 Eclipse
- A1.4 Bash
- A1.5 Zsh
- A1.6 Git in Powershell
- A1.7 ģģ½
-
A2. ė¶ė” B: ģ ķ리ģ¼ģ“ģ ģ Git ė£źø°
- A2.1 Git ėŖ ė ¹ģ“
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
-
A3. ė¶ė” C: Git ėŖ ė ¹ģ“
- A3.1 ģ¤ģ¹ģ ģ¤ģ
- A3.2 ķė”ģ ķø ź°ģ øģ¤źø°ģ ģģ±ķźø°
- A3.3 ģ¤ė ģ· ė¤ė£Øźø°
- A3.4 Branchģ Merge
- A3.5 ź³µģ ķź³ ģ ė°ģ“ķøķźø°
- A3.6 볓기ģ ė¹źµ
- A3.7 Debugging
- A3.8 Patch ķźø°
- A3.9 Email
- A3.10 ė¤ė„ø ė²ģ ź“리 ģģ¤ķ
- A3.11 ź“리
- A3.12 Plumbing ėŖ ė ¹ģ“
10.3 Gitģ ė“ė¶ - Git Refs
Git Refs
ģ“ė¤ ģ»¤ė° 1a410e
ģ“ģ ģ ėŖØė ķģ¤ķ 리넼 ė³“ė ¤ė©“ git log 1a410e
ė¼ź³ ģ¤ķķė©“ ķģ¤ķ 리넼 ė³¼ ģ ģģ§ė§, ģ¬ģ ķ 1a410e
넼 źø°ģµķ“ģ¼ ķė¤. ģ“ ģ»¤ė°ģ ė§ģ§ė§ 커ė°ģ“źø° ė문ģ ķģ¤ķ 리넼 ė°ė¼ ėŖØė ź°ģ²“넼 ģ”°ķķ ģ ģė¤.
SHA-1 ź°ģ ė ė” ģ¬ģ©ķźø°ė³“ė¤ ģ¬ģ“ ģ“ė¦ģ¼ė” ė ķ¬ģøķ°ź° ģģ¼ė©“ ź·øź±ø ģ¬ģ©ķė ź² ė ģ¢ė¤. ģøģ°źø° ģ¬ģ“ ģ“ė¦ģ¼ė” ė ķģ¼ģ SHA-1 ź°ģ ģ ģ„ķė¤.
Gitģģė ģ“ė° ź²ģ āReferencesā ėė āRefsā ė¼ź³ ė¶ė„øė¤. ģ“ SHA-1 ź°ģ ģ ģ„ķė ķģ¼ģ .git/refs
ėė ķ 리ģ ģė¤.
ģģ ģ ķė”ģ ķøģė ģģ§ .git/refs
ėė ķ 리 ģģ ķģ¼ģ ģź³ ėė ķ ė¦¬ė§ ėŖ ź° ģė¤.
$ find .git/refs
.git/refs
.git/refs/heads
.git/refs/tags
$ find .git/refs -type f
Refsź° ģģ¼ė©“ 커ė°ģ 찾기 ģ¬ģģ§ė¤. ģ¬ģ¤ ė“ė¶ė ģėģ²ė¼ ėØģķė¤.
$ echo 1a410efbd13591db07496601ebc7a059dd55cfe9 > .git/refs/heads/master
SHA-1 ź° ėģ ģ ģ§źø ė§ė Refs넼 ģ¬ģ©ķ ģ ģė¤.
$ git log --pretty=oneline master
1a410efbd13591db07496601ebc7a059dd55cfe9 third commit
cac0cab538b970a37ea1e769cbbde608743bc96d second commit
fdf4fc3344e67ab068f836878b6c4951e3b15f3d first commit
Refs ķģ¼ģ ģ§ģ ź³ ģ¹ė ź²ģ“ ģ¢ ėŖ»ė§ė
ķė¤. Gitģė ģ¢ ė ģģ ķź² ė°źæ ģ ģė git update-ref
ėŖ
ė ¹ģ“ ģė¤.
$ git update-ref refs/heads/master 1a410efbd13591db07496601ebc7a059dd55cfe9
Git ėøėģ¹ģ ģķ ģ“ ė°ė” ģ“ź±°ė¤. ėøėģ¹ė ģ“ė¤ ģģ ģ¤ ė§ģ§ė§ ģģ ģ ź°ė¦¬ķ¤ė ķ¬ģøķ° ėė Refsģ“ė¤. ź°ėØķ ė ė²ģ§ø 커ė°ģ ź°ė¦¬ķ¤ė ėøėģ¹ė„¼ ė§ė¤ģ“ 볓ģ.
$ git update-ref refs/heads/test cac0ca
ėøėģ¹ė ģ§ģ ź°ė¦¬ķ¤ė ģ»¤ė°ź³¼ ź·ø 커ė°ģ¼ė” ė°ė¼ź° ģ ģė ėŖØė 커ė°ģ ķ¬ķØķė¤.
$ git log --pretty=oneline test
cac0cab538b970a37ea1e769cbbde608743bc96d second commit
fdf4fc3344e67ab068f836878b6c4951e3b15f3d first commit
ģ“ģ Git ė°ģ“ķ°ė² ģ“ģ¤ė ģė ź·øė¦¼ģ²ė¼ 볓ģøė¤.

git branch <branch>
ėŖ
ė ¹ģ ģ¤ķķė©“ Gitģ ė“ė¶ģ ģ¼ė” update-ref
ėŖ
ė ¹ģ ģ¤ķķė¤. ģ
ė „ė°ģ ėøėģ¹ ģ“ė¦ź³¼ ķ ėøėģ¹ģ ė§ģ§ė§ 커ė°ģ SHA-1 ź°ģ ź°ģ øė¤ update-ref
ėŖ
ė ¹ģ ģ¤ķķė¤.
HEAD
git branch <branch>
ėŖ
ė ¹ģ ģ¤ķķ ė Gitģ ģ“ė»ź² ė§ģ§ė§ 커ė°ģ SHA-1 ź°ģ ģė ź±øź¹?
HEAD ķģ¼ģ ķ ėøėģ¹ė„¼ ź°ė¦¬ķ¤ė ź°ģ (symbolic) Refsė¤.
ź°ģ Refsė¼ģ ė¤ė„ø ź²ź³¼ ė¤ė„“ė¤. ģ“ Refsė ė¤ė„ø Refs넼 ź°ė¦¬ķ¤ė ź²ģ“ė¼ģ SHA-1 ź°ģ“ ģė¤. ķģ¼ģ ģ“ģ“ ė³“ė©“ ģėģ ź°ģ“ ģź²¼ė¤.
$ cat .git/HEAD
ref: refs/heads/master
git checkout test
넼 ģ¤ķķė©“ Gitģ HEAD ķģ¼ģ ģėģ ź°ģ“ ė°ź¾¼ė¤.
$ cat .git/HEAD
ref: refs/heads/test
git commit
ģ ģ¤ķķė©“ ģ»¤ė° ź°ģ²“ź° ė§ė¤ģ“ģ§ėė°, ģ§źø HEADź° ź°ė¦¬ķ¤ź³ ģė 커ė°ģ SHA-1 ź°ģ“ ź·ø ģ»¤ė° ź°ģ²“ģ ė¶ėŖØė” ģ¬ģ©ėė¤.
ģ“ ķģ¼ė ģģ¼ė” ģ§ģ ķøģ§ķ ģ ģģ§ė§ git symbolic-ref
ė¼ė ėŖ
ė ¹ģ“ź° ģģ“ģ ģ¢ ė ģģ ķź² ģ¬ģ©ķ ģ ģė¤.
ģ“ ėŖ
ė ¹ģ¼ė” HEADģ ź°ģ ģ½ģ ģ ģė¤.
$ git symbolic-ref HEAD
refs/heads/master
HEADģ ź°ģ ė³ź²½ķ ģė ģė¤.
$ git symbolic-ref HEAD refs/heads/test
$ cat .git/HEAD
ref: refs/heads/test
refs ķģģ ė§ģ§ ģģ¼ė©“ ģģ ķ ģ ģė¤.
$ git symbolic-ref HEAD test
fatal: Refusing to point HEAD outside of refs/
ķź·ø
ģ¤ģķ ź°ģ²“ ģø ź°ģ§ė ėŖØė ģ“ķ“ė“¤ź³ (Blob, Tree, 커ė°) ģ“ķ“ė³¼ ź°ģ²“ź° ķėź° ėØģė¤. ķź·ø ź°ģ²“ė ģ»¤ė° ź°ģ²“ė ė§¤ģ° ė¹ģ·ķė¤. ģ»¤ė° ź°ģ²“ģ²ė¼ ėź°, ģøģ ķź·øė„¼ ė¬ģėģ§ ķź·ø ė©ģģ§ė 묓ģģ“ź³ ģ“ė¤ ģ»¤ė°ģ ź°ė¦¬ķ¤ėģ§ģ ėķ ģ ė³“ź° ķ¬ķØėė¤. ķź·ø ź°ģ²“ė Tree ź°ģ²“ź° ģėė¼ ģ»¤ė° ź°ģ²“넼 ź°ė¦¬ķ¤ė ź²ģ“ ź·ø ėģ ģ°Øģ“ė¤. ėøėģ¹ģ²ė¼ ģ»¤ė° ź°ģ²“넼 ź°ė¦¬ķ¤ģ§ė§ ģ®źøø ģė ģė¤. ķź·ø ź°ģ²“ė ė ź·ø ģ“ė¦ģ“ ė»ķė 커ė°ė§ ź°ė¦¬ķØė¤.
Gitģ źø°ģ“ ģģ ė°°ģ ėÆ ķź·øė Annotated ķź·øģ Lightweight ķź·ø ė ģ¢ ė„ė” ėėė¤. 먼ģ ģėģ ź°ģ“ Lightweight ķź·øė„¼ ė§ė¤ģ“ 볓ģ.
$ git update-ref refs/tags/v1.0 cac0cab538b970a37ea1e769cbbde608743bc96d
Lightwieght ķź·øė ė§ė¤źø° ģ½ė¤. ėøėģ¹ė ė¹ģ·ķģ§ė§ ėøėģ¹ģ²ė¼ ģ®źøø ģė ģė¤.
ģ“ģ ė¹ķ“ Annotated ķź·øė ģ¢ ė ė³µģ”ķė¤. Annotated ķź·øė„¼ ė§ė¤ė©“ Gitģ ķź·ø ź°ģ²“넼 ė§ė¤ź³ ź±°źø°ģ 커ė°ģ ź°ė¦¬ķ¤ė Refs넼 ģ ģ„ķė¤.
Annotated ķź·øė 커ė°ģ ģ§ģ ź°ė¦¬ķ¤ģ§ ģź³ ķź·ø ź°ģ²“넼 ź°ė¦¬ķØė¤.
-a
ģµģ
ģ ģ£¼ź³ Annotated ķź·øė„¼ ė§ė¤ģ“ ķģøķ“볓ģ.
$ git tag -a v1.1 1a410efbd13591db07496601ebc7a059dd55cfe9 -m 'test tag'
ķź·ø ź°ģ²“ģ SHA-1 ź°ģ ķģøķė¤.
$ cat .git/refs/tags/v1.1
9585191f37f7b0fb9444f35a9bf50de191beadc2
git cat-file -p
ėŖ
ė ¹ģ¼ė” ķ“ė¹ SHA-1 ź°ģ ė“ģ©ģ ģ”°ķķė¤.
$ git cat-file -p 9585191f37f7b0fb9444f35a9bf50de191beadc2
object 1a410efbd13591db07496601ebc7a059dd55cfe9
type commit
tag v1.1
tagger Scott Chacon <schacon@gmail.com> Sat May 23 16:48:58 2009 -0700
test tag
object
ė¶ė¶ģ ģė SHA-1 ź°ģ“ ģ¤ģ ė” ķź·øź° ź°ė¦¬ķ¤ė 커ė°ģ“ė¤.
ģ»¤ė° ź°ģ²“ėæė§ ģėė¼ ėŖØė Git ź°ģ²“ģ ķź·øė„¼ ė¬ ģ ģė¤.
ģ»¤ė° ź°ģ²“ģ ķź·øė„¼ ė¤ė ź²ģ“ ģėė¼ Git ź°ģ²“ģ ķź·øė„¼ ė¤ė ź²ģ“ė¤.
Gitģ ź°ė°ķė ķė”ģ ķøģģė ź“ė¦¬ģź° ģģ ģ GPG ź³µź°ķ¤ė„¼ Blob ź°ģ²“ė” ģ¶ź°ķź³ ź·ø ķģ¼ģ ķź·øė„¼ ė¬ģė¤.
ģė ėŖ
ė ¹ģ¼ė” ź·ø ź³µź°ķ¤ė„¼ ķģøķ ģ ģė¤.
$ git cat-file blob junio-gpg-pub
Linux Kernel ģ ģ„ģģė 커ė°ģ“ ģė ė¤ė„ø ź°ģ²“넼 ź°ė¦¬ķ¤ė ķź·ø ź°ģ²“ź° ģė¤. ź·ø ķź·øė ģ ģ„ģģ ģ²ģģ¼ė” ģģ¤ ģ½ė넼 ģķ¬ķøķģ ė ź·ø 첫 Tree ź°ģ²“넼 ź°ė¦¬ķØė¤.
리모ķø
ė¦¬ėŖØķø Refsė¼ė ź²ė ģė¤.
리모ķøė„¼ ģ¶ź°ķź³ Push ķė©“ Gitģ ź° ėøėģ¹ė§ė¤ Push ķ ė§ģ§ė§ 커ė°ģ“ 묓ģģøģ§ refs/remotes
ėė ķ 리ģ ģ ģ„ķė¤.
ģ넼 ė¤ģ“, origin
ģ“ė¼ė 리모ķøė„¼ ģ¶ź°ķź³ master
ėøėģ¹ė„¼ Push ķė¤.
$ git remote add origin git@github.com:schacon/simplegit-progit.git
$ git push origin master
Counting objects: 11, done.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (7/7), 716 bytes, done.
Total 7 (delta 2), reused 4 (delta 1)
To git@github.com:schacon/simplegit-progit.git
a11bef0..ca82a6d master -> master
origin
ģ master
ėøėģ¹ģģ ģė²ģ ė§ģ§ė§ģ¼ė” źµķķ 커ė°ģ“ ģ“ė¤ ź²ģøģ§ refs/remotes/origin/master
ķģ¼ģģ ķģøķ ģ ģė¤.
$ cat .git/refs/remotes/origin/master
ca82a6dff817ec66f44342007202690a93763949
refs/heads
ģ ģė Refsģø ėøėģ¹ģ ė¬ė¦¬ ė¦¬ėŖØķø Refsė Checkout ķ ģ ģź³ ģ½źø° ģ©ėė”ė§ ģø ģ ģė ėøėģ¹ģø ź²ģ“ė¤.
ģ“ ė¦¬ėŖØķø Refsė ģė²ģ ėøėģ¹ź° ź°ė¦¬ķ¤ė 커ė°ģ“ 묓ģģøģ§ ģ ģ“ė ģ¼ģ¢
ģ ė¶ė§ķ¬ģ“ė¤.