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

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

Aug 19, 2015

Download

Devices & Hardware

Vadim Drobinin
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Git для начинающих

Git — наше всё

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

Page 2: Git для начинающих

Вместо плана

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

• Основы Git

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

• Git-кунг-фу

2

Page 3: Git для начинающих

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

3

Page 4: Git для начинающих

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

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

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

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

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

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

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

4

Page 5: Git для начинающих

Linux5

Page 6: Git для начинающих

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

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

Page 7: Git для начинающих

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

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

Page 8: Git для начинающих

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

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

Page 9: Git для начинающих

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

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

Page 10: Git для начинающих

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

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

Page 11: Git для начинающих

Основы Git

11

Page 12: Git для начинающих

Раньше

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

R1 R2 R3 R4

a.py

b.py

c.py

R5

A1

B

C1

A1

B

C2

A2

B1

C2

A2

B2

C3

12

Page 13: Git для начинающих

Сейчас

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

R1 R2 R3 R4

a.py

b.py

c.py

Δ1 Δ3

Δ3

R5

Δ4

Δ4Δ1 Δ2

13

Page 14: Git для начинающих

Структура .git

14

• Объекты

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

• Деревья

• Коммиты

• Ссылки

Page 15: Git для начинающих

Git — это граф

15

1

23

7

8

9

6

5

4

HEAD

Page 16: Git для начинающих

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

Индекс

HEAD

16

Page 17: Git для начинающих

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

Индекс

HEAD

git add

17

Page 18: Git для начинающих

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

Индекс

HEAD

git add

18

git commit

Page 19: Git для начинающих

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

• git commit

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

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

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

19

Page 20: Git для начинающих

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

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

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

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

20

Page 21: Git для начинающих

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

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

21

Page 22: Git для начинающих

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

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

22

Page 23: Git для начинающих

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

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

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

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

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

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

Page 24: Git для начинающих

Этикет

• Commit often

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

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

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

24

Page 25: Git для начинающих

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

25

Page 26: Git для начинающих

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

26

1

23

7

8

9

6

5

4

HEAD

Page 27: Git для начинающих

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

Индекс

HEAD

27

Page 28: Git для начинающих

git stash

28

Page 29: Git для начинающих

git log

29

Page 30: Git для начинающих

30

Page 31: Git для начинающих

git branch

31

A B C D E

F G

Page 32: Git для начинающих

Git-кунг-фу

32

Page 33: Git для начинающих

$ git rebase master

33

C D E

BA

master

feature

HEAD

Page 34: Git для начинающих

34

C’ D’ E’

BA

master

feature

HEAD

Page 35: Git для начинающих

git merge

35

A B C D

F G feature

master

Page 36: Git для начинающих

$ git merge feature

36

A B C D

F G

(E)

feature

master

Page 37: Git для начинающих

$ git merge feature -- squash

37

A B C D

F G

(Sq)

feature

master

Page 38: Git для начинающих

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

38

A B

F G feature

master

Page 39: Git для начинающих

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

39

A B F Gfeaturemaster,

Page 40: Git для начинающих

$ git merge feature --no-ff

40

A B

F G

(M)

feature

master

Page 41: Git для начинающих

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

• resolve

• recursive

• ours

• octopus

• subtree

41

Page 42: Git для начинающих

git rerere

42

$ git config --global rerere.enabled true

Page 43: Git для начинающих

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

43

git commit -p

Page 44: Git для начинающих

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

44

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

Page 45: Git для начинающих

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

Page 46: Git для начинающих

GitHub

46

Page 47: Git для начинающих

git-kata

47