81
Основы Git 1 пятница, 18 октября 13 г.

Основы Git

Embed Size (px)

DESCRIPTION

Презентация в Тензор. Основы Git. In Russian.

Citation preview

Page 1: Основы Git

Основы Git

1

пятница, 18 октября 13 г.

Page 2: Основы Git

Что такое Git?

2

пятница, 18 октября 13 г.

Page 3: Основы Git

Что такое Git?

3

пятница, 18 октября 13 г.

Page 4: Основы Git

Что такое Git?

• Git это связанный, ориентированный граф без циклов

• Вершины графа могут иметь метки

4

пятница, 18 октября 13 г.

Page 5: Основы Git

Комиты = ВершиныКаждая вершина - один комит.

Каждый комит имеет ссылку на родителя.

Родителей может быть несколько

Каждый комит хранит полное состояние всего репозитория (а не дельту как в SVN)** http://git-scm.com/book/ru/Git-%D0%B8%D0%B7%D0%BD%D1%83%D1%82%D1%80%D0%B8-%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B-%D0%B2-Git

5

пятница, 18 октября 13 г.

Page 6: Основы Git

Комиты = ВершиныКаждый комит идентифицируется хэш-функцией SHA1

$ git log -1commit 8d7e037995616c3be2032287030e04b2ef11df25Author: Oleg Elifantiev <[email protected]>Date: Mon Oct 14 23:54:21 2013 +0400

Fixed method docblock

6

пятница, 18 октября 13 г.

Page 7: Основы Git

Бранчи = Метки [ feature ] o--o--o / --о--о--o--o--o [ master ]

Бранч это всего лишь «метка», указывающая на один конкретный комит

7

пятница, 18 октября 13 г.

Page 8: Основы Git

Бранчи = Метки [ feature ] o--o--o / --о--о--o--o--o [ master ]

Бранч в Git - не отдельное поддерево репозитория, как в SVN.

8

пятница, 18 октября 13 г.

Page 9: Основы Git

Бранчи = Метки [ feature ] o--o--o / --о--о--o--o--o [ master ]

С каждым комитом «метка» перемещается на новое место.

9

пятница, 18 октября 13 г.

Page 10: Основы Git

Бранчи = Метки [ feature ] o--o--o / --о--о--o--o--o----------------о [ master ]

С каждым комитом «метка» перемещается на новое место.

10

пятница, 18 октября 13 г.

Page 11: Основы Git

Бранчи = Метки [ feature ] o--o--o / --о--о--o--o--o----------------о [ master ]

С каждым комитом «метка» перемещается на новое место.

11

пятница, 18 октября 13 г.

Page 12: Основы Git

Извлечение кода

$ git checkout COMMIT_SHA

Аналог SVN Checkout

Извлекается всегда какой-то комит.$ git checkout 762df55d$ git checkout master$ git checkout topic~4

12

пятница, 18 октября 13 г.

Page 13: Основы Git

Комит изменений---------------------------------

Repository (git database) --------------------------------

Staging area («index») --------------------------------

Working copy

----------------------------

13

пятница, 18 октября 13 г.

Page 14: Основы Git

Комит изменений---------------------------------

Repository (git database) --------------------------------

Staging area («index») /\-------------------------------- || $ git add file.ext

Working copy

----------------------------

14

пятница, 18 октября 13 г.

Page 15: Основы Git

Комит изменений---------------------------------

Repository (git database) /\-------------------------------- || $ git commit -m «done!»

Staging area («index») /\-------------------------------- || $ git add file.ext

Working copy

----------------------------

15

пятница, 18 октября 13 г.

Page 16: Основы Git

Комит изменений---------------------------------

Repository (git database) --------------------------------

Staging area («index») --------------------------------

Working copy

----------------------------

16

пятница, 18 октября 13 г.

Page 17: Основы Git

Комит изменений---------------------------------

Repository (git database) /\-------------------------------- || || Staging area («index») || $ git commit -am «done!» ||-------------------------------- ||

Working copy

----------------------------

17

пятница, 18 октября 13 г.

Page 18: Основы Git

Комит измененийКомит в Git - не то же самое что в SVN

Комит в Git НЕ меняет состояние удаленного репозиторий.

Комит в Git - локальное действие которое можно откатить, изменить, сделать с ним все что угодно... пока оно не попало на сервер*

*Потом тоже можно, но ваши коллеги вас за это будут нелюбить...

18

пятница, 18 октября 13 г.

Page 19: Основы Git

Комит изменений$ git commit --amend

В Git можно легко переписать последний комит. Например исправить опечатку в коде или поправить комментарий. Это позволяет избежать вот такого лога:

66dbaf53 01.10.13 13:00:00 Исправил ошибку

6dacfa23 01.10.13 13:00:10 Исправил ошибку 2

19

пятница, 18 октября 13 г.

Page 20: Основы Git

ВеткиСоздание ветки и переключение на нее

--o--o--o [ master ]

$ git checkout -b new-branch

20

пятница, 18 октября 13 г.

Page 21: Основы Git

ВеткиСоздание ветки и переключение на нее

--o--o--o [ master, new-branch ]

$ git checkout -b new-branch

21

пятница, 18 октября 13 г.

Page 22: Основы Git

ВеткиСоздание ветки и переключение на нее

--o-------o-------o [ master ]

$ git checkout -b new-branch master~1

22

пятница, 18 октября 13 г.

Page 23: Основы Git

ВеткиСоздание ветки и переключение на нее

[new-branch]--o-------o-------o [ master ]

$ git checkout -b new-branch master~1

23

пятница, 18 октября 13 г.

Page 24: Основы Git

Слияние (Merge) [ feature ] o--o--o / --о--о--o--o--o [ master ]

При слиянии образуется новый комит с несколькими родителями.

24

пятница, 18 октября 13 г.

Page 25: Основы Git

Слияние (Merge) [ feature ] o--o--o / --о--о--o--o--o [ master ]

$ git checkout master$ git merge feature

25

пятница, 18 октября 13 г.

Page 26: Основы Git

Слияние (Merge) [ feature ] o--o--o----------------- / \--о--о--o--o--o----------------o [ master ]

$ git checkout master$ git merge feature

26

пятница, 18 октября 13 г.

Page 27: Основы Git

Слияние (Merge) [ feature ] o--o--o----------------- / \--о--о--o--o--o----------------o [ master ]

$ git checkout master$ git merge feature

27

пятница, 18 октября 13 г.

Page 28: Основы Git

Слияние (Merge)Fast-forward

[ feature ] o--o--o / --о--о--o--o--o [ master ]

Если возможно, Git линеаризует историю

28

пятница, 18 октября 13 г.

Page 29: Основы Git

Слияние (Merge)Fast-forward

[ feature ] o--o--o / --о--о--o--o--o [ master ]

Если возможно, Git линеаризует историю$ git checkout master$ git merge feature

29

пятница, 18 октября 13 г.

Page 30: Основы Git

Слияние (Merge)Fast-forward

--о--о--o--o--o--о--о--о [ master, feature ]

Если возможно, Git линеаризует историю$ git checkout master$ git merge feature

30

пятница, 18 октября 13 г.

Page 31: Основы Git

Слияние (Merge)Fast-forward

[ feature ] o--o--o / --о--о--o--o--o [ master ]

Но можно отказаться$ git checkout master$ git merge feature --no-ff

31

пятница, 18 октября 13 г.

Page 32: Основы Git

Слияние (Merge)Fast-forward

[ feature ] o--o--o / \--о--о--o--o--o---------o [ master ]

Но можно отказаться...$ git checkout master$ git merge feature --no-ff

32

пятница, 18 октября 13 г.

Page 33: Основы Git

Rebase

Позволяет перенести кусок истории из одного места в другое

--о--о--o--o--o [ master ] \ о--о [ server ]

33

пятница, 18 октября 13 г.

Page 34: Основы Git

Rebase

Позволяет перенести кусок истории из одного места в другое

--о--о--o--o--o [ master ] \ о--о [ server ] $ git checkout server$ git rebase master

34

пятница, 18 октября 13 г.

Page 35: Основы Git

Rebase

Позволяет перенести кусок истории из одного места в другое

--о--о--o--o--o [ master ] \ о--о [ server ] $ git checkout server$ git rebase master

35

пятница, 18 октября 13 г.

Page 36: Основы Git

Удаленный репозиторий

$ git clone https://git.sbis.ru/root/sbis3-ws.gitCloning into sbis3-ws...

$ git remote -vorigin https://git.sbis.ru/root/sbis3-ws.git

Клонирует весь репозиторий, все ветки, всю историю

36

пятница, 18 октября 13 г.

Page 37: Основы Git

Удаленный репозиторий

SVN: Checkout/Commit/Update

Git: Clone/Commit+Push/Pull

37

пятница, 18 октября 13 г.

Page 38: Основы Git

Удаленный репозиторий

Обновление текущей ветки из удаленного репозитория

$ git pull

Могут случиться конфликты (как и в SVN при update)

38

пятница, 18 октября 13 г.

Page 39: Основы Git

Удаленный репозиторий

На самом деле pull это...

--о--о--o--o--o--o [ master ]

39

пятница, 18 октября 13 г.

Page 40: Основы Git

Удаленный репозиторий

На самом деле pull это... fetch

[ origin/master ] o--o--o / --о--о--o--o--o--o [ master ]

40

пятница, 18 октября 13 г.

Page 41: Основы Git

Удаленный репозиторий

На самом деле pull это... fetch + merge

[ origin/master ] o--o--o / \--о--о--o--o--o--о-----o [ master ]

41

пятница, 18 октября 13 г.

Page 42: Основы Git

Удаленный репозиторий

Отправка своих изменений - push

[ origin/master ] o--o--o / \--о--о--o--o--o--о-----o [ master ]

$ git push origin master

42

пятница, 18 октября 13 г.

Page 43: Основы Git

Удаленный репозиторий

Отправка своих изменений - push

o--o--o / \--о--о--o--o--o--о-----o [ master, origin/master ]

$ git push origin master

43

пятница, 18 октября 13 г.

Page 44: Основы Git

Откат измененийSVN Revert - Git ???

44

пятница, 18 октября 13 г.

Page 45: Основы Git

Откат измененийSVN Revert:

• отменяет изменения в локальной копии

• НЕ делает новый комит

45

пятница, 18 октября 13 г.

Page 46: Основы Git

Откат измененийGit Revert:

• Отменяет указанный комит

• ДЕЛАЕТ новый комит в локальном репозитории

46

пятница, 18 октября 13 г.

Page 47: Основы Git

Откат измененийGit Revert:

---о---о---о---о [ master ]

$ git revert master~1

47

пятница, 18 октября 13 г.

Page 48: Основы Git

Откат измененийGit Revert:

---о---о---о---о---о [ master ]

$ git revert master~1

48

пятница, 18 октября 13 г.

Page 49: Основы Git

Откат измененийЕсли нужно сбросить состояние рабочей копии на какое-то состояние?

49

пятница, 18 октября 13 г.

Page 50: Основы Git

Откат измененийЕсли нужно сбросить состояние рабочей копии на какое-то состояние?

Если что-то в процессе....

$ git merge --abort$ git rebase --abort$ git revert --abort

50

пятница, 18 октября 13 г.

Page 51: Основы Git

Откат измененийЕсли нужно сбросить состояние рабочей копии на какое-то состояние?

Если нужно просто откатить локальные изменения (которые не закомичены)

$ git reset --hard HEAD

51

пятница, 18 октября 13 г.

Page 52: Основы Git

Откат измененийЕсли нужно сбросить состояние рабочей копии на какое-то состояние?

Если нужно откатить свою локальную ветку на какое-то предыдущее состояние

$ git reset --hard COMMIT_SHA

52

пятница, 18 октября 13 г.

Page 53: Основы Git

Откат изменений$ git reset --hard 12345

--о--о--о--о [ master, origin/master ]

53

пятница, 18 октября 13 г.

Page 54: Основы Git

Откат изменений$ git reset --hard 12345

[ master ]--о--о--о--о [ origin/master ]

54

пятница, 18 октября 13 г.

Page 55: Основы Git

Откат изменений$ git reset --hard 12345

$ git commit, git commit, git push

о--о [ master ] /--о--о--о--о [ origin/master ]

55

пятница, 18 октября 13 г.

Page 56: Основы Git

Методологии

56

пятница, 18 октября 13 г.

Page 57: Основы Git

Centralized workflowНаиболее простой вариант при переходе с SVN.

Все комитят в одну ветку.

При этом преимущества Git практически не используются

57

пятница, 18 октября 13 г.

Page 58: Основы Git

Feature branchКаждая фича делается в отдельной ветке. Все ветки скидываются в master.

о--о--о [ alice-feature ] /--о--о--о--о--о [ master] \ о--о--о--о--о [ bob-feature ]

58

пятница, 18 октября 13 г.

Page 59: Основы Git

Feature branchКаждая фича делается в отдельной ветке. Все ветки скидываются в master.

о--о--о / \--о--о--о--о--о--о [ master] \ о--о--о--о--о [ bobs-feature ]

59

пятница, 18 октября 13 г.

Page 60: Основы Git

Feature branchКаждая фича делается в отдельной ветке. Все ветки скидываются в master.

о--о--о / \--о--о--о--о--о--о---------о [ master] \ / о--о--о--о--о

60

пятница, 18 октября 13 г.

Page 61: Основы Git

GitflowЕсть ветки для разработки

.--о--о--о [ master ]| \| о--о [ hotfix ]| о--о--о [ release-2.1 ]| /--о--о--о--о--о [ development ] \ о--о--о [ feature ]

61

пятница, 18 октября 13 г.

Page 62: Основы Git

GitflowЕсть ветки для разработки, для фичей

.--о--о--о [ master ]| \| о--о [ hotfix ]| о--о--о [ release-2.1 ]| /--о--о--о--о--о [ development ] \ о--о--о [ feature ]

62

пятница, 18 октября 13 г.

Page 63: Основы Git

GitflowЕсть ветки для разработки, для фичейдля release-candidate

.--о--о--о [ master ]| \| о--о [ hotfix ]| о--о--о [ release-2.1 ]| /--о--о--о--о--о [ development ] \ о--о--о [ feature ]

63

пятница, 18 октября 13 г.

Page 64: Основы Git

GitflowЕсть ветки для разработки, для фичей, для release-candidate, для релизов

.--о--о--о [ master ]| \| о--о [ hotfix ]| о--о--о [ release-2.1 ]| /--о--о--о--о--о [ development ] \ о--о--о [ feature ]

64

пятница, 18 октября 13 г.

Page 65: Основы Git

GitflowЕсть ветки для разработки, для фичейдля release-candidate, для релизов и хотфиксов

.--о--о--о [ master ]| \| о--о [ hotfix ]| о--о--о [ release-2.1 ]| /--о--о--о--о--о [ development ] \ о--о--о [ feature ]

65

пятница, 18 октября 13 г.

Page 66: Основы Git

GitflowЕсть ветки для разработки, для фичейдля release-candidate, для релизов и хотфиксов

.--о--о--о [ master ]| \| о--о [ hotfix ]| о--о--о [ release-2.1 ]| /--о--о--о--о--о--о [ development ] \ / о--о--о-------

66

пятница, 18 октября 13 г.

Page 67: Основы Git

GitflowЕсть ветки для разработки, для фичейдля release-candidate, для релизов и хотфиксов

.--о--о--о--о [ master ]| \ /| о--о--- | о--о--о [ release-2.1 ]| /--о--о--о--о--о--о [ development ] \ / о--о--о-------

67

пятница, 18 октября 13 г.

Page 68: Основы Git

GitflowЕсть ветки для разработки, для фичейдля release-candidate, для релизов и хотфиксов <2.1>.--о--о--о--о---о [ master ]| \ / /| о--о--- /| о--о--о----- | / \--о--о--о--о--о--о--о [ development ] \ / о--о--о-------

68

пятница, 18 октября 13 г.

Page 69: Основы Git

Профиты

69

пятница, 18 октября 13 г.

Page 70: Основы Git

Быстрый и умный

• Быстрые ветки - удобнее работать правильно. Для мержа ветки в родителя не обязательно сливать родителя к себе.

• Умнее разрешение конфликтов (даже порой решает tree-conflict в случае перемещения/переименования)

70

пятница, 18 октября 13 г.

Page 71: Основы Git

Все в ветках

• Никто ни с кем не пересекается во время разработки фичи

• Видно, какой код попал в релиз, а какой - нет

71

пятница, 18 октября 13 г.

Page 72: Основы Git

Распределенность

• Локально вся история. • Можно без интернет-подключения переключиться на любую ветку, на любую ревизию, вообще в любое состояние репозитория

• У каждого полная резервная копия репозитория

72

пятница, 18 октября 13 г.

Page 73: Основы Git

Минусы

73

пятница, 18 октября 13 г.

Page 74: Основы Git

Сложный

• Git сложный$ git commit --help

git commit [-a | --interactive | --patch] [-s] [-v] [-u<mode>] [--amend] [--dry-run] [(-c | -C | --fixup | --squash) <commit>] [-F <file> | -m <msg>] [--reset-author] [--allow-empty] [--allow-empty-message] [--no-verify] [-e] [--author=<author>] [--date=<date>] [--cleanup=<mode>] [--[no-]status]

74

пятница, 18 октября 13 г.

Page 75: Основы Git

GUI-Клиенты...$ git commit -m message

75

пятница, 18 октября 13 г.

Page 76: Основы Git

GUI-Клиенты...$ git clone https://...

76

пятница, 18 октября 13 г.

Page 77: Основы Git

GUI-Клиенты...$ git fetch

77

пятница, 18 октября 13 г.

Page 78: Основы Git

GUI-Клиенты...$ git push origin development

78

пятница, 18 октября 13 г.

Page 79: Основы Git

GUI-клиентыЯ рекомендую SourceTree

http://www.sourcetreeapp.com/

79

пятница, 18 октября 13 г.

Page 80: Основы Git

GUI-клиентыИз GUI для Git просто необходим визуализатор истории...

80

пятница, 18 октября 13 г.

Page 81: Основы Git

Спасибо за внимание!Есть вопросы?

пятница, 18 октября 13 г.