You are on page 1of 49

Git

Git

Git
ii

COLLABORATORS
TITLE :
Git
ACTION

NAME

DATE

SIGNATURE

WRITTEN BY

Ben Lynn

2007

REVISION HISTORY
NUMBER

DATE
2007

DESCRIPTION

NAME
BL

Git
iii

1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.1.1 , , . . . . . . . . . . . . . . . . . . . . . . . . .

2.2 / . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.5

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.7 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10

3.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10

11

4.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

4.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12

4.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

4.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

4.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

14

4.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

14

4.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15

4.8

15

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Git
iv

16

5.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

16

5.2 - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

16

5.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

5.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

5.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

5.6 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

5.7 - ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

20

5.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

20

6 Git

21

6.1 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21

6.2 Git SSH, HTTP

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21

6.3 Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

6.4 : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

23

6.5 , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

23

6.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

24

6.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25

6.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25

7 Git

26

7.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

26

7.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

26

7.3

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

27

7.3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

27

7.4 HEAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

27

7.5 HEAD' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

28

7.6 Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

29

7.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

29

7.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

30

32

8.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

32

8.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

32

8.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

33

8.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

33

8.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

33

8.6 Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

33

8.7

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

33

8.7.1 Blobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

34

8.7.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

34

8.7.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

35

8.7.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

36

Git
v

9 Git

37

9.1 SHA1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

37

9.2 Microsoft Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

37

9.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

37

9.4 ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

38

9.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

38

9.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

38

9.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

38

9.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

39

9.9

39

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9.10

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10 :

39
41

Git
vi

, , .
, .

-
.
. , ,
.
, , - . , . , ""
.
. , : , .
, , , , . , ,
.


" " ,
- , . . ,
. -,

.
. , , ,
. , ,
. ,
.
.

.
. , - .
, , . ,
, .
, . ,
, .

Git
vii


. ,
, . . , , ,
.
, ?
?
. -
. .
. ,
, ,
, - .
, - ?
, , - - - , , . , ,
, .
, . .
, .
, Git, , . , , .
.
, , . , -
, .


, , .
. , . , .
, , , .
. ,
, .
, .
? ,
. Git
,
. ,
, .

Git
viii


. ,
.
, , , . . :
, , .
, , .
. , ,
, , , .
. , . .

Git
1 / 41

Git .
,
.
- .
Git:
Git ,
.
, , .
.

(): JunJie, Meng JiangWei. - Google Docs.


: Rodrigo Toledo.

HTML : HTML CSS.
PDF : .
Debian: . Ubuntu (Jaunty Jackalope).
.

1.1
Dustin Sallings, Alberto Bertogli, James Cameron, Douglas Livingstone, Michael Budde,
Richard Albury, Tarmigan, Derek Mahar Frode Aannevik .
Daniel Baumann Debian.
JunJie, Meng JiangWei , Rodrigo Toledo .
[ , , ,
.]
. , , ! , .
.
Git

Git
2 / 41

http://repo.or.cz/ . Git-. Git.


http://gitorious.org/ Git-, .
http://github.com/ , .
.

1.2
GNU General Public License version 3. ,
Git, , :
$ git clone git://repo.or.cz/gitmagic.git

# "gitmagic".

:
$ git clone git://github.com/blynn/gitmagic.git
$ git clone git://gitorious.org/gitmagic/mainline.git

Git
3 / 41


Git, , . ,
.
, Git ,
.

2.1
? , :
$ git init
$ git add .
$ git commit -m " "
, , :
$ git reset --hard
. , :
$ git commit -a -m " "

2.1.1 , ,
, , git add. ,
Git:
$ git add _...
, , Git , ,
:
$ git rm _...
, .
git mv, , mv. :
$ git mv OLDFILE NEWFILE

Git
4 / 41

2.2 /
,
. :
$ git log
(, . .) SHA1 . :
$ git reset --hard SHA1_HASH

.
, . :
$ git checkout SHA1_HASH
, .
, ,
,
, .
(branch, . .), . :
$ git checkout master
. , Git,
checkout.
:
git reset --hard: ,
.
git checkout: , , , . ,
, ,
, . .

:
$ git checkout SHA1_HASH some.file another.file
: checkout . , checkout,
Git. , - ,
Git , git commit -a.
? :
$ git checkout :/" "
, .
5- :
$ git checkout master~5

Git
5 / 41

2.2.1
.
.
$ git commit -a
$ git revert SHA1_HASH
. git log ,
.

2.3
(changelog, . .).
, git log :
$ git log > ChangeLog

2.4
Git , :
$ git clone git://server/path/to/files
, , :
$ git clone git://git.or.cz/gitmagic.git
clone .

2.5
git clone, , :
$ git pull

2.6
, , . , , ,
, . , .
, ,
.
Git, , :

Git
6 / 41

$ git init
$ git add .
$ git commit -m " "
:
$ git clone .:/path/to/script
. ssh. ,
git daemon :
$ git clone git://./path/to/script
, , :
$ git commit -a -m " "
, ,
, , :
$ git pull
, . , , .

2.7 ?
, :
$ git diff
:
$ git diff "@{yesterday}"
, 2 :
$ git diff SHA1_HASH "master~2"
, git apply.
:
$ git whatchanged --since="2 weeks ago"
qgit , - , tig ,
. , -, git instaweb, -.

Git
7 / 41

2.8
A, B, C, D , , A,
. D, B. ?
. , D.
1. A B . , , :
$ git diff B A | git apply
2. A , :
$ git checkout A FILES...
3. A B , :
$ git revert B
? , . Git , ,
-.

Git
8 / 41


checkout - .
.
Git , - .
. ,
. ,
.

3.1
Git.
rsync .
, , .
Git .
:
$ git clone other.computer:/path/to/files
Git . ,
$ git commit -a
$ git pull other.computer:/path/to/files HEAD
.
, , Git ,
, .

3.2
Git- :
$ git init
$ git add .
$ git commit -m "Initial commit"

Git
9 / 41

Git- -
,
Git-, :
$ GIT_DIR=proj.git git init
$ git daemon --detach #
, repo.or.cz, Git-,
.
, :
$ git push git://central.server/path/to/proj.git HEAD
, , :
$ git clone git://central.server/path/to/proj.git
, :
$ git commit -a
$ git push
,
. :
$ git commit -a
$ git pull

3.3
? ? :
$ git clone git://main.server/path/to/files
, .
, :
$ git pull

3.4
, , , ? - ! -
, ,
. , - ,
, .
,
.
20- SHA1
HEAD . , . , , , .

Git
10 / 41

3.5
, . :
$ git clone . /some/new/directory
Git ,
, , . , ,
.
.
$ git pull /the/other/clone HEAD

3.6
, ,
Git? Git- :
$ git init
$ git add .
$ git commit -m "Initial commit"
:
$ git clone . /some/new/directory
, Git.
, ,
:
$ git add .
$ git commit -m " "
:
$ git commit -a -m " "
$ git pull
.
.
.
git svn Subversion Git Subversion .

Git
11 / 41


- Git.
: - . . .
, ,
. , , ,
.
,
, .
. ,
.
, , ,
. , Git
,
.
: Git , , , , - git branch.

. ,
. , - , -
.

4.1
, , (" "),
- ?
, , , .
- :
$
$
$
$

echo " " > myfile.txt


git init
git add .
git commit -m " "

Git
12 / 41

Git- . :
$ git checkout -b boss # ,
$ echo " " > myfile.txt
$ git commit -a -m " "
, . . :
$ git checkout master #
! . ,
$ git checkout boss #
,
.

4.2
, - , - ,
- , :
$ git commit -a
$ git checkout SHA1_HASH
, , . . , :
$ git checkout master
. , , ,
.
, - ? :
$ git checkout -b dirty
, master.
, :
$ git checkout dirty
, , . : ,
master. , ,
, .
, , Git , git
checkout -b.

Git
13 / 41

4.3
, ,
:
$ git commit -a
$ git checkout -b fixes SHA1_HASH
, , :
$ git commit -a -m " "
$ git push #
$ git checkout master
.

4.4
, .
, ,
, 2
.
, , ?

.
,
II , I, . Git,
( -
). , , ,
:
$ git checkout -b part2
, , . ,
,
$ git checkout master
$ git merge part2
$ git branch -d part2 #
.
! , ? , ,
. ! -, master-
:
$ git checkout master
. ,
. , , I II, :

Git
14 / 41

$ git checkout part2


$ git merge master
- . , :
$ git checkout master
$ git merge part2
$ git branch -d part2
, .
.

4.5
, .
,
, . :
$ git checkout -b sanitized
$ git checkout -b medley
, : , ,
.., . :
$ git checkout sanitized
$ git cherry-pick SHA1_HASH
"sanitized". , ,
.

4.6
:
$ git branch
"master", . "master" .
-d -m () .
. git help branch.
"master" - . , , .
"master", .

Git
15 / 41

4.7
- , : ,
- .
, , . , , ,
, , . , Git
, .
$ git stash
()
. , , , , .
, :
$ git stash apply # , - .
, -. git
help stash. , Git
"" .

4.8
Mozilla Firefox ,
. .
Git . , Git . Git .
, Linux
.
Git , .
- screen. , .
( ), , screen (
). screen , .
,
, . Git ,
.

Git
16 / 41


Git, . , , : ,
. ,
,
.
, , .
,
. , ,
. Git . , , - , Git.
.

5.1
? :
$ git commit --amend
. , ?
git add, .
? :
$ git commit --amend -a

5.2 -
, .
, - , - (commit messages) .
:
$ git rebase -i HEAD~10

Git
17 / 41

10- (
$EDITOR). :
pick 5c6eb73 repo.or.cz
pick a311a64 " "
pick 100834f push Makefile
:
, .
, .
"pick" "edit", .
"pick" "squash" .
, :
$ git commit --amend
, :
$ git rebase --continue
, -
rebase.

5.3
, . - , . , (push)
.
Git
.
.
git rebase , . , --onto, .
git help rebase
. ,
.

5.4
""
, , . , , ,
, - .
? - -
, . -
. :

Git
18 / 41

$ git filter-branch --tree-filter 'rm top/secret/file' HEAD


git help lter-branch,
. , lter-branch
- .
.git/refs/original
. , lter-branch , , ,
, .
, , , .

5.5
Git? , ,
Git.
- ? git fast-import, Git " ".
, - ,
, "" .
, - , /tmp/history:
commit refs/heads/master
committer Alice <alice@example.com> Thu, 01 Jan 1970 00:00:00 +0000
data <<EOT
.
EOT
M 100644 inline hello.c
data <<EOT
#include <stdio.h>
int main() {
printf("Hello, world!\n");
return 0;
}
EOT
commit refs/heads/master
committer Bob <bob@example.com> Tue, 14 Mar 2000 01:59:26 -0800
data <<EOT
printf() write()
EOT
M 100644 inline hello.c
data <<EOT
#include <unistd.h>
int main() {
write(1, "Hello, world!\n", 14);
return 0;
}
EOT

Git
19 / 41

Git :
$ mkdir project; cd project; git init $ git fast-import < /tmp/history
(checkout) :
$ git checkout master .
git fast-export Git ,
git fast-import. , , , -
. ,
.

5.6 ?
, - ,
, . , !
? .
, . , , Git .
$ git bisect start
$ git bisect bad SHA1_OF_BAD_VERSION
$ git bisect good SHA1_OF_GOOD_VERSION
Git . , ,
, :
$ git bisect bad
, "bad" "good" . Git
"" "" , .
, ,
. , :
$ git bisect reset
, -
:
$ git bisect run COMMAND
Git , "" ,
"" "". 0, "", 125 1 127 "". .
! , ,
.

Git
20 / 41

5.7 - ?
, Git blame:
$ git blame FILE
.
, .

5.8
, - . , .
.
.
, .
, - ,
"" " ". ""
. - , "" .
. Git . . ,
: .
, , , . Git, , , -
, . , , - ,
.
"" ,
. ,
- , , ,
. ,
, .
- .
, , : , "" .
,
, .

Git
21 / 41

Git
Git , .
, Git, pull
clone, .
Git .
,
. , Git , , .

6.1 ?
,
git log. Git .
, :
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
, --global.

6.2 Git SSH, HTTP


, SSH -, Git . Git
HTTP, , .
, , Git ; , web:
$ GIT_DIR=proj.git git init
"proj.git" :
$ git --bare update-server-info
$ cp hooks/post-update.sample hooks/post-update
Git , :

Git
22 / 41

$ chmod a+x hooks/post-update


SSH :
$ git push web.server:/path/to/proj.git master
HTTP:
$ git clone http://web.server/proj.git

6.3 Git
? ? , git fast-export git
fast-import .
git ,
git bundle.
(bundle):
$ git bundle create somefile HEAD
bundle, somefile, , : email, , , xxd
, , ..
, :
$ git pull somefile
. , somefile
Git .
,
:
$ git bundle create somefile HEAD ^COMMON_SHA1
, , . . , :
$ git tag -f lastbundle HEAD
:
$ git bundle create newbundle HEAD ^lastbundle

Git
23 / 41

6.4 :
, ,
. .
, ,
. ,
. , , -
: Git.
, :
$ git diff COMMIT
, .
Git , :
$ git apply < FILE
.
, ,
, :
$ git format-patch START_COMMIT
git-send-email .
:
$ git format-patch START_COMMIT..END_COMMIT
email :
$ git am < FILE
, , , .
web- , , , .
Mbox- , , , , ,
!

6.5 ,
, , , git push
git pull URL. Git
? .
:
$ git config --list

Git
24 / 41

remote.origin.url URL; "origin" - .


"master" - , ,
, .
, :
$ git config remote.origin.url NEW_URL
branch.master.merge git pull. , ,
HEAD , pull .
, , branch.master.remote. pull ,
:
$ git pull ANOTHER_URL master
, push pull .

6.6
, .
, Git : .
, Git .
:
$ git branch -r
- :
origin/HEAD
origin/master
origin/experimental
HEAD ,
Git. , , ,
. SHA1 , :
$ git diff origin/HEAD
"experimental" :
$ git log origin/experimental

Git
25 / 41

6.7
, ,
. :
$ git remote add other ANOTHER_URL
$ git pull other some_branch
,
:
$ git diff origin/experimental^ other/some_branch~5
, ,
? , , .
pull :
$ git fetch # Fetch from origin, the default.
$ git fetch other # Fetch from the second programmer.
, , , , Git. , , pull fetch git merge;
. pull,
fetch; .
. git help remote , , .

6.8
Git ,
pull. Git
.
, Git ,
. , , , . ,
.
, , .
.
Git , -, Git. , Git ,
, ,
.

Git
26 / 41

Git
Git,
.

7.1
Git , . , :
$ git archive --format=tar --prefix=proj-1.2.3/ HEAD

7.2
Git , , ,
. :
$ git add .
$ git add -u
Git .
add, git commit -a, . git help
ignore , , .
:
$ git ls-files -d -m -o -z | xargs -0 git update-index --add --remove
-z -0 ,
. , -x -X.

Git
27 / 41

7.3
? ? , ?
. :
$ git add -p
Git ,
. "y" "n". , , "?" .
, :
$ git commit
, (staged ). ,
-a, Git .
, ? - . git add -i,
, .
,
. , git commit --interactive,
, .

7.3.1
Git, index, , . . Git
. , Git ,
.
, commit -a . . , ,
. -a ,
, , git add.
,
. , , .
, .

7.4 HEAD
HEAD - . ,
. Git, .
:
$ git reset HEAD~3

Git
28 / 41

HEAD . Git ,
, .
.
? .
SHA1 HEAD, :
$ git reset SHA1
, . . Git HEAD ORIG_HEAD,
:
$ git reset ORIG_HEAD

7.5 HEAD'
ORIG_HEAD . , , , .
Git ,
. .
.git/objects .
.
Git .git/logs. refs
, HEAD , - HEAD.
.
reog . :
$ git reflog
reog, :
$ git checkout "@{10 minutes ago}"
:
$ git checkout "@{5}"
"Specifying Revisions" git help rev-parse, .
.
, :
$ git config gc.pruneexpire "30 days"
, , 30 , git gc.
git gc:
$ git config gc.auto 0
git gc .

Git
29 / 41

7.6 Git
Gita, UNIX , Git : GUI, -, , , , , .. , Git - , . Git,
.
- Git
:
$ git config --global alias.co checkout
$ git config --global --get-regexp alias
alias.co checkout
$ git co foo

#
# -, 'git checkout foo'

$ git symbolic-ref HEAD


.
"refs/heads/" :
$ git symbolic-ref HEAD 2> /dev/null | cut -b 12 contrib , Git. . Debian Ubuntu /usr/share/doc/git-core/contrib.
workdir/git-new-workdir - . ,
:
$ git-new-workdir an/existing/repo new/directory
, , ,
, . merge, push
pull.

7.7
Git. ,
, .
Checkout: . -
, , -f:
$ git checkout -f COMMIT

Git
30 / 41

, ,
, - . , .
Reset: , . ,
:
$ git reset --hard [COMMIT]
Branch: , .
:
$ git branch -D BRANCH # -d
, , -
. , :
$ git branch -M [SOURCE] TARGET # -m
, . .git .git/logs(
" HEAD'" ).
.
Clean: ,
. , , :
$ git clean -f -d
!

7.8
.
, , git add. ,
- , ,
. ,
.
( ) - .
, , .
, , .
, .
, ,
$ cd .git/hooks
$ cp pre-commit.sample pre-commit # Git: chmod +x pre-commit
Git , . pre-commit ,
:

Git
31 / 41

if git ls-les -o | grep \.txt$; then echo FAIL! .txt . exit 1


Git , git help hooks. ,
,
, , -,
, ,
post-update , Git http.
, Git.

Git
32 / 41


, Git . .
.

8.1
Git ? ,
, , . ,
, , , , Git
.
, .
, , .
.
.
.
.git . Git
. - ,
ls. git push git pull
.
Git ,
. Git .git .

8.2
, .
- .
SHA1 160-
, . : , -
.
SHA1 ,
, . : hash

Git
33 / 41

chains ( ). , Git
.
, Git ".git/objects", , ID. ,
- , Git
.

8.3
Git , ,
? , git mv, , git rm
git add.
Git . , ,
! , ,
. ,
.

8.4
, Git , , , "". ,
, Git , .
, Git .
, ,
, Git .

8.5
, , , Git .
- Git, .git, proj.git, .
Git Git .git,
. ,
GIT_DIR , , Git
--bare.

8.6 Git
http://lkml.org/lkml/2005/4/6/121 [] Linux Kernel Mailing List ,
Git. -
Git.

8.7
Git- .

Git
34 / 41

8.7.1 Blobs
. , . :
$
$
$
$

echo sweet > YOUR_FILENAME


git init
git add .
find .git/objects -type f

.git/objects/aa/823728ea7d592acc69b36875a482cdf3fd5c8d.
, ? , SHA1 :
"blob" SP "6" NUL "sweet" LF
aa823728ea7d592acc69b36875a482cdf3fd5c8d, SP , NUL LF . , :
$ echo "blob 6"$'\001'"sweet" | tr '\001' '\000' | sha1sum
, Bash, NUL ,
tr.
Git -: ,
, BLOB .
,
. "blob 6" ,
; .
, , . : BLOB .
, . . .git/objects -
, . Git .
, .git/objects Zlib . http://www.zlib.net/zpipe.c [zpipe-D],
:
$ git cat-file -p aa823728ea7d592acc69b36875a482cdf3fd5c8d
.

8.7.2
? - . Git
:
$ git commit # Type some message.
$ find .git/objects -type f
3 . , 2 ,
. "rose".
, , :

Git
35 / 41

$ git filter-branch --tree-filter 'mv YOUR_FILENAME rose'


$ find .git/objects -type f
.git/objects/05/b217bb859794d08bb9e4f7f04cbda4b207fbe9,
SHA1 :
"tree" SP "32" NUL "100644 rose" NUL 0xaa823728ea7d592acc69b36875a482cdf3fd5c8d
- - :
$ echo 05b217bb859794d08bb9e4f7f04cbda4b207fbe9 | git cat-file --batch
zpipe :
$ zpipe -d < .git/objects/05/b217bb859794d08bb9e4f7f04cbda4b207fbe9 | sha1sum
CAT-, ,
.
tree: , , ,
. "100644", "rose",
BLOB , "rose".
- , . ,
.
lter-branch, .
,
, :
$ rm -r .git/refs/original
$ git reflog expire --expire=now --all
$ git prune
, , ,
. , . , .git: , Git ,
? , git update-ref
-d, refs/original .

8.7.3
2 3 . - .
, . , ,
Git :
$ git commit --amend -m Shakespeare # Change the commit message.
$ git filter-branch --env-filter 'export
GIT_AUTHOR_DATE="Fri 13 Feb 2009 15:31:30 -0800"
GIT_AUTHOR_NAME="Alice"
GIT_AUTHOR_EMAIL="alice@example.com"
GIT_COMMITTER_DATE="Fri, 13 Feb 2009 15:31:30 -0800"
GIT_COMMITTER_NAME="Bob"
GIT_COMMITTER_EMAIL="bob@example.com"' # Rig timestamps and authors.
$ find .git/objects -type f

Git
36 / 41

.git/objects/49/993fe130c4b3bf24857a15d7969c396b7bc187 SHA1 :
"commit 158" NUL
"tree 05b217bb859794d08bb9e4f7f04cbda4b207fbe9" LF
"author Alice <alice@example.com> 1234567890 -0800" LF
"committer Bob <bob@example.com> 1234567890 -0800" LF
LF
"Shakespeare" LF
, zpipe cat-le, .
, ,
.

8.7.4
. Git. :
,
C, . , Git.
, , , ,
, , Git
, .
, - ,
, . , . , , :
, .
.
. - .
, BLOB,
. , , ,
, .
, . ,
, .
, 20 ,
Git.
Git? ? ? ? .
HEAD .git/HEAD, .
, . :
.git/refs/heads. : .git/refs/tags,
.

Git
37 / 41

Git
Git, . , ,
, . ,
!

9.1 SHA1
, SHA1. . , ,
, Git .
Git - ,
SHA1.

9.2 Microsoft Windows


Git Microsoft Windows :
Cygwin, Linux- Windows, Git Windows.
-Git MSys , , , .

9.3
,
, Git , , . Git ,
, , .
- , . git submodule .

Git
38 / 41

9.4 ?
.
, ,
:
1. Di' , .
2. , , ,
.
, Git. , .

9.5
Git , , , .
, , , ,
. , git checkout , cp -a,
, .

9.6
,
.
, ,
.
--depth. ,
.

9.7
Git , .
. ,
, , . ,
, , .
, , Git , .
, , . ,
. .
, , , , , . ,
-.

Git
39 / 41

,
, Git .
, . , Git
, . , ,
, - .
, , . , ,
.
Git, - .
, , Git
Rsync Git .

9.8
, , , . Git ,
.
. , ,
Git , , ,
.
, , , , .

9.9
. , .
Git, . Git
, .

9.10
0, 1. , Git . .
, , , rebase
.
Git' : ,
HEAD , 20 .
, , Git .
git log, , ,
. .
- . , - rebase . , , .
git checkout git commit -C , rebase .

Git
40 / 41

, ,
, rebase .

Git
41 / 41

10

:
, IETF:
W3C . , "en", "ja", "zh-Hant". txt "en"
.
, Klingon, :
$
$
$
$
$
$

git clone git://repo.or.cz/gitmagic.git


cd gitmagic
mkdir tlh # "tlh" - IETF Klingon.
cd tlh
cp ../en/intro.txt .
edit intro.txt # .

. :
$ make LANG=tlh
$ firefox book.html
, GitHub.com , : "gitmagic" ,
, .
HTML PDF .
. ,
: , Google Docs.
.