git для начинающих

47
Git — наше всё Вадим Дробинин 1

Upload: vadim-drobinin

Post on 19-Aug-2015

119 views

Category:

Devices & Hardware


2 download

TRANSCRIPT

Git — наше всё

Вадим Дробинин1

Вместо плана

• Немного истории

• Основы Git

• Не совсем основы Git

• Git-кунг-фу

2

Для чего нужны системы контроля версий?

3

Угадайте проект• Тысячи разработчиков

• Сотрудники по всему миру

• Установлен на миллионах компьютеров

• Лежит в основе 90% суперкомпьютеров в мире

• Работает на телефонах некоторых из вас

• 11 лет создавался без системы контроля версий

• У них классный логотип ^_^

4

Linux5

РаньшеГлавный чувак Вы

main.c library.c library.h

version-1.0.zip

v1/main.c v1/library.c v1/library.h

cp -Rf v1 patch

patch/main.c patch/library.c patch/library.h

6

РаньшеГлавный чувак Вы

main.c library.c library.h

version-1.0.zip

v1/main.c v1/library.c v1/library.h

cp -Rf v1 patch

patch/main.c patch/library.c patch/library.h

7

РаньшеГлавный чувак Вы

main.c library.c library.h

version-1.0.zip

v1/main.c v1/library.c v1/library.h

cp -Rf v1 patch

patch/main.c patch/library.c* patch/library.h

diff -u v1 patch

8

РаньшеГлавный чувак Вы

main.c library.c library.h

version-1.0.zip

v1/main.c v1/library.c v1/library.h

cp -Rf v1 patch

patch/main.c patch/library.c* patch/library.h

diff -u v1 patchE-mail

9

РаньшеГлавный чувак Вы

main.c library.c library.h

version-1.0.zip

v1/main.c v1/library.c v1/library.h

cp -Rf v1 patch

patch/main.c patch/library.c* patch/library.h

diff -u v1 patchE-mail

version-1.1.zip

10

Основы Git

11

Раньше

Хранилище «снимков»

R1 R2 R3 R4

a.py

b.py

c.py

R5

A1

B

C1

A1

B

C2

A2

B1

C2

A2

B2

C3

12

Сейчас

Хранилище изменений

R1 R2 R3 R4

a.py

b.py

c.py

Δ1 Δ3

Δ3

R5

Δ4

Δ4Δ1 Δ2

13

Структура .git

14

• Объекты

• Блобы (англ. blobs)

• Деревья

• Коммиты

• Ссылки

Git — это граф

15

1

23

7

8

9

6

5

4

HEAD

Рабочая копия

Индекс

HEAD

16

Рабочая директория

Индекс

HEAD

git add

17

Рабочая директория

Индекс

HEAD

git add

18

git commit

Главная идея• git add

• git commit

• Что, если какие-то файлы не добавлены в индекс?

• — Они не попадут в коммит.

• Добавлять и коммитить файлы можно независимо.

19

Настроить систему

• Скачать (git-scm.com/downloads)

• $ git config --global user.name “Vad Drobinin”

• $ git config --global user.email “[email protected]

20

Клонировать репозиторий

$ git clone [email protected]:/opt/git/pesto.git

21

Создать репозиторий

$ touch test.py $ git init $ git add . $ git commit -m “Hey there :)”

22

Подытожим• Редактировать файлы: vim / emacs / etc

• Индексировать изменения: git add (file)

• Просматривать изменения: git status / git diff

• Добавлять в хранилище: git commit

• Получать изменения: git pull

• Отправлять в удаленный репозиторий: git push23

Этикет

• Commit often

• Не делайте коммит того, что еще не сделано до конца

• Git — не система для бэкапов

• Тестируйте перед отправкой

24

Не совсем основы Git

25

Отменить изменения

26

1

23

7

8

9

6

5

4

HEAD

Рабочая копия

Индекс

HEAD

27

git stash

28

git log

29

30

git branch

31

A B C D E

F G

Git-кунг-фу

32

$ git rebase master

33

C D E

BA

master

feature

HEAD

34

C’ D’ E’

BA

master

feature

HEAD

git merge

35

A B C D

F G feature

master

$ git merge feature

36

A B C D

F G

(E)

feature

master

$ git merge feature -- squash

37

A B C D

F G

(Sq)

feature

master

Перемотка (ff-merge)

38

A B

F G feature

master

Перемотка (ff-merge)

39

A B F Gfeaturemaster,

$ git merge feature --no-ff

40

A B

F G

(M)

feature

master

Стратегии слияния

• resolve

• recursive

• ours

• octopus

• subtree

41

git rerere

42

$ git config --global rerere.enabled true

Коммит слишком большой?

43

git commit -p

Удаленная ветка?

44

$ git config gc.pruneexpire “30 days” $ git reflog

git bisect

45

$ git bisect start $ git bisect bad $ git bisect good v1.0 Bisecting: 6 revisions left to test after this [ecb6e1bc347ccecc5f9350d878ce677feb13d3b2] error handling on repo

GitHub

46

git-kata

47