Upload
oelifantiev
View
1.212
Download
3
Embed Size (px)
DESCRIPTION
Презентация в Тензор. Основы Git. In Russian.
Citation preview
Основы Git
1
пятница, 18 октября 13 г.
Что такое Git?
2
пятница, 18 октября 13 г.
Что такое Git?
3
пятница, 18 октября 13 г.
Что такое Git?
• Git это связанный, ориентированный граф без циклов
• Вершины графа могут иметь метки
4
пятница, 18 октября 13 г.
Комиты = ВершиныКаждая вершина - один комит.
Каждый комит имеет ссылку на родителя.
Родителей может быть несколько
Каждый комит хранит полное состояние всего репозитория (а не дельту как в 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 г.
Комиты = ВершиныКаждый комит идентифицируется хэш-функцией SHA1
$ git log -1commit 8d7e037995616c3be2032287030e04b2ef11df25Author: Oleg Elifantiev <[email protected]>Date: Mon Oct 14 23:54:21 2013 +0400
Fixed method docblock
6
пятница, 18 октября 13 г.
Бранчи = Метки [ feature ] o--o--o / --о--о--o--o--o [ master ]
Бранч это всего лишь «метка», указывающая на один конкретный комит
7
пятница, 18 октября 13 г.
Бранчи = Метки [ feature ] o--o--o / --о--о--o--o--o [ master ]
Бранч в Git - не отдельное поддерево репозитория, как в SVN.
8
пятница, 18 октября 13 г.
Бранчи = Метки [ feature ] o--o--o / --о--о--o--o--o [ master ]
С каждым комитом «метка» перемещается на новое место.
9
пятница, 18 октября 13 г.
Бранчи = Метки [ feature ] o--o--o / --о--о--o--o--o----------------о [ master ]
С каждым комитом «метка» перемещается на новое место.
10
пятница, 18 октября 13 г.
Бранчи = Метки [ feature ] o--o--o / --о--о--o--o--o----------------о [ master ]
С каждым комитом «метка» перемещается на новое место.
11
пятница, 18 октября 13 г.
Извлечение кода
$ git checkout COMMIT_SHA
Аналог SVN Checkout
Извлекается всегда какой-то комит.$ git checkout 762df55d$ git checkout master$ git checkout topic~4
12
пятница, 18 октября 13 г.
Комит изменений---------------------------------
Repository (git database) --------------------------------
Staging area («index») --------------------------------
Working copy
----------------------------
13
пятница, 18 октября 13 г.
Комит изменений---------------------------------
Repository (git database) --------------------------------
Staging area («index») /\-------------------------------- || $ git add file.ext
Working copy
----------------------------
14
пятница, 18 октября 13 г.
Комит изменений---------------------------------
Repository (git database) /\-------------------------------- || $ git commit -m «done!»
Staging area («index») /\-------------------------------- || $ git add file.ext
Working copy
----------------------------
15
пятница, 18 октября 13 г.
Комит изменений---------------------------------
Repository (git database) --------------------------------
Staging area («index») --------------------------------
Working copy
----------------------------
16
пятница, 18 октября 13 г.
Комит изменений---------------------------------
Repository (git database) /\-------------------------------- || || Staging area («index») || $ git commit -am «done!» ||-------------------------------- ||
Working copy
----------------------------
17
пятница, 18 октября 13 г.
Комит измененийКомит в Git - не то же самое что в SVN
Комит в Git НЕ меняет состояние удаленного репозиторий.
Комит в Git - локальное действие которое можно откатить, изменить, сделать с ним все что угодно... пока оно не попало на сервер*
*Потом тоже можно, но ваши коллеги вас за это будут нелюбить...
18
пятница, 18 октября 13 г.
Комит изменений$ git commit --amend
В Git можно легко переписать последний комит. Например исправить опечатку в коде или поправить комментарий. Это позволяет избежать вот такого лога:
66dbaf53 01.10.13 13:00:00 Исправил ошибку
6dacfa23 01.10.13 13:00:10 Исправил ошибку 2
19
пятница, 18 октября 13 г.
ВеткиСоздание ветки и переключение на нее
--o--o--o [ master ]
$ git checkout -b new-branch
20
пятница, 18 октября 13 г.
ВеткиСоздание ветки и переключение на нее
--o--o--o [ master, new-branch ]
$ git checkout -b new-branch
21
пятница, 18 октября 13 г.
ВеткиСоздание ветки и переключение на нее
--o-------o-------o [ master ]
$ git checkout -b new-branch master~1
22
пятница, 18 октября 13 г.
ВеткиСоздание ветки и переключение на нее
[new-branch]--o-------o-------o [ master ]
$ git checkout -b new-branch master~1
23
пятница, 18 октября 13 г.
Слияние (Merge) [ feature ] o--o--o / --о--о--o--o--o [ master ]
При слиянии образуется новый комит с несколькими родителями.
24
пятница, 18 октября 13 г.
Слияние (Merge) [ feature ] o--o--o / --о--о--o--o--o [ master ]
$ git checkout master$ git merge feature
25
пятница, 18 октября 13 г.
Слияние (Merge) [ feature ] o--o--o----------------- / \--о--о--o--o--o----------------o [ master ]
$ git checkout master$ git merge feature
26
пятница, 18 октября 13 г.
Слияние (Merge) [ feature ] o--o--o----------------- / \--о--о--o--o--o----------------o [ master ]
$ git checkout master$ git merge feature
27
пятница, 18 октября 13 г.
Слияние (Merge)Fast-forward
[ feature ] o--o--o / --о--о--o--o--o [ master ]
Если возможно, Git линеаризует историю
28
пятница, 18 октября 13 г.
Слияние (Merge)Fast-forward
[ feature ] o--o--o / --о--о--o--o--o [ master ]
Если возможно, Git линеаризует историю$ git checkout master$ git merge feature
29
пятница, 18 октября 13 г.
Слияние (Merge)Fast-forward
--о--о--o--o--o--о--о--о [ master, feature ]
Если возможно, Git линеаризует историю$ git checkout master$ git merge feature
30
пятница, 18 октября 13 г.
Слияние (Merge)Fast-forward
[ feature ] o--o--o / --о--о--o--o--o [ master ]
Но можно отказаться$ git checkout master$ git merge feature --no-ff
31
пятница, 18 октября 13 г.
Слияние (Merge)Fast-forward
[ feature ] o--o--o / \--о--о--o--o--o---------o [ master ]
Но можно отказаться...$ git checkout master$ git merge feature --no-ff
32
пятница, 18 октября 13 г.
Rebase
Позволяет перенести кусок истории из одного места в другое
--о--о--o--o--o [ master ] \ о--о [ server ]
33
пятница, 18 октября 13 г.
Rebase
Позволяет перенести кусок истории из одного места в другое
--о--о--o--o--o [ master ] \ о--о [ server ] $ git checkout server$ git rebase master
34
пятница, 18 октября 13 г.
Rebase
Позволяет перенести кусок истории из одного места в другое
--о--о--o--o--o [ master ] \ о--о [ server ] $ git checkout server$ git rebase master
35
пятница, 18 октября 13 г.
Удаленный репозиторий
$ 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 г.
Удаленный репозиторий
SVN: Checkout/Commit/Update
Git: Clone/Commit+Push/Pull
37
пятница, 18 октября 13 г.
Удаленный репозиторий
Обновление текущей ветки из удаленного репозитория
$ git pull
Могут случиться конфликты (как и в SVN при update)
38
пятница, 18 октября 13 г.
Удаленный репозиторий
На самом деле pull это...
--о--о--o--o--o--o [ master ]
39
пятница, 18 октября 13 г.
Удаленный репозиторий
На самом деле pull это... fetch
[ origin/master ] o--o--o / --о--о--o--o--o--o [ master ]
40
пятница, 18 октября 13 г.
Удаленный репозиторий
На самом деле pull это... fetch + merge
[ origin/master ] o--o--o / \--о--о--o--o--o--о-----o [ master ]
41
пятница, 18 октября 13 г.
Удаленный репозиторий
Отправка своих изменений - push
[ origin/master ] o--o--o / \--о--о--o--o--o--о-----o [ master ]
$ git push origin master
42
пятница, 18 октября 13 г.
Удаленный репозиторий
Отправка своих изменений - push
o--o--o / \--о--о--o--o--o--о-----o [ master, origin/master ]
$ git push origin master
43
пятница, 18 октября 13 г.
Откат измененийSVN Revert - Git ???
44
пятница, 18 октября 13 г.
Откат измененийSVN Revert:
• отменяет изменения в локальной копии
• НЕ делает новый комит
45
пятница, 18 октября 13 г.
Откат измененийGit Revert:
• Отменяет указанный комит
• ДЕЛАЕТ новый комит в локальном репозитории
46
пятница, 18 октября 13 г.
Откат измененийGit Revert:
---о---о---о---о [ master ]
$ git revert master~1
47
пятница, 18 октября 13 г.
Откат измененийGit Revert:
---о---о---о---о---о [ master ]
$ git revert master~1
48
пятница, 18 октября 13 г.
Откат измененийЕсли нужно сбросить состояние рабочей копии на какое-то состояние?
49
пятница, 18 октября 13 г.
Откат измененийЕсли нужно сбросить состояние рабочей копии на какое-то состояние?
Если что-то в процессе....
$ git merge --abort$ git rebase --abort$ git revert --abort
50
пятница, 18 октября 13 г.
Откат измененийЕсли нужно сбросить состояние рабочей копии на какое-то состояние?
Если нужно просто откатить локальные изменения (которые не закомичены)
$ git reset --hard HEAD
51
пятница, 18 октября 13 г.
Откат измененийЕсли нужно сбросить состояние рабочей копии на какое-то состояние?
Если нужно откатить свою локальную ветку на какое-то предыдущее состояние
$ git reset --hard COMMIT_SHA
52
пятница, 18 октября 13 г.
Откат изменений$ git reset --hard 12345
--о--о--о--о [ master, origin/master ]
53
пятница, 18 октября 13 г.
Откат изменений$ git reset --hard 12345
[ master ]--о--о--о--о [ origin/master ]
54
пятница, 18 октября 13 г.
Откат изменений$ git reset --hard 12345
$ git commit, git commit, git push
о--о [ master ] /--о--о--о--о [ origin/master ]
55
пятница, 18 октября 13 г.
Методологии
56
пятница, 18 октября 13 г.
Centralized workflowНаиболее простой вариант при переходе с SVN.
Все комитят в одну ветку.
При этом преимущества Git практически не используются
57
пятница, 18 октября 13 г.
Feature branchКаждая фича делается в отдельной ветке. Все ветки скидываются в master.
о--о--о [ alice-feature ] /--о--о--о--о--о [ master] \ о--о--о--о--о [ bob-feature ]
58
пятница, 18 октября 13 г.
Feature branchКаждая фича делается в отдельной ветке. Все ветки скидываются в master.
о--о--о / \--о--о--о--о--о--о [ master] \ о--о--о--о--о [ bobs-feature ]
59
пятница, 18 октября 13 г.
Feature branchКаждая фича делается в отдельной ветке. Все ветки скидываются в master.
о--о--о / \--о--о--о--о--о--о---------о [ master] \ / о--о--о--о--о
60
пятница, 18 октября 13 г.
GitflowЕсть ветки для разработки
.--о--о--о [ master ]| \| о--о [ hotfix ]| о--о--о [ release-2.1 ]| /--о--о--о--о--о [ development ] \ о--о--о [ feature ]
61
пятница, 18 октября 13 г.
GitflowЕсть ветки для разработки, для фичей
.--о--о--о [ master ]| \| о--о [ hotfix ]| о--о--о [ release-2.1 ]| /--о--о--о--о--о [ development ] \ о--о--о [ feature ]
62
пятница, 18 октября 13 г.
GitflowЕсть ветки для разработки, для фичейдля release-candidate
.--о--о--о [ master ]| \| о--о [ hotfix ]| о--о--о [ release-2.1 ]| /--о--о--о--о--о [ development ] \ о--о--о [ feature ]
63
пятница, 18 октября 13 г.
GitflowЕсть ветки для разработки, для фичей, для release-candidate, для релизов
.--о--о--о [ master ]| \| о--о [ hotfix ]| о--о--о [ release-2.1 ]| /--о--о--о--о--о [ development ] \ о--о--о [ feature ]
64
пятница, 18 октября 13 г.
GitflowЕсть ветки для разработки, для фичейдля release-candidate, для релизов и хотфиксов
.--о--о--о [ master ]| \| о--о [ hotfix ]| о--о--о [ release-2.1 ]| /--о--о--о--о--о [ development ] \ о--о--о [ feature ]
65
пятница, 18 октября 13 г.
GitflowЕсть ветки для разработки, для фичейдля release-candidate, для релизов и хотфиксов
.--о--о--о [ master ]| \| о--о [ hotfix ]| о--о--о [ release-2.1 ]| /--о--о--о--о--о--о [ development ] \ / о--о--о-------
66
пятница, 18 октября 13 г.
GitflowЕсть ветки для разработки, для фичейдля release-candidate, для релизов и хотфиксов
.--о--о--о--о [ master ]| \ /| о--о--- | о--о--о [ release-2.1 ]| /--о--о--о--о--о--о [ development ] \ / о--о--о-------
67
пятница, 18 октября 13 г.
GitflowЕсть ветки для разработки, для фичейдля release-candidate, для релизов и хотфиксов <2.1>.--о--о--о--о---о [ master ]| \ / /| о--о--- /| о--о--о----- | / \--о--о--о--о--о--о--о [ development ] \ / о--о--о-------
68
пятница, 18 октября 13 г.
Профиты
69
пятница, 18 октября 13 г.
Быстрый и умный
• Быстрые ветки - удобнее работать правильно. Для мержа ветки в родителя не обязательно сливать родителя к себе.
• Умнее разрешение конфликтов (даже порой решает tree-conflict в случае перемещения/переименования)
70
пятница, 18 октября 13 г.
Все в ветках
• Никто ни с кем не пересекается во время разработки фичи
• Видно, какой код попал в релиз, а какой - нет
71
пятница, 18 октября 13 г.
Распределенность
• Локально вся история. • Можно без интернет-подключения переключиться на любую ветку, на любую ревизию, вообще в любое состояние репозитория
• У каждого полная резервная копия репозитория
72
пятница, 18 октября 13 г.
Минусы
73
пятница, 18 октября 13 г.
Сложный
• 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 г.
GUI-Клиенты...$ git commit -m message
75
пятница, 18 октября 13 г.
GUI-Клиенты...$ git clone https://...
76
пятница, 18 октября 13 г.
GUI-Клиенты...$ git fetch
77
пятница, 18 октября 13 г.
GUI-Клиенты...$ git push origin development
78
пятница, 18 октября 13 г.
GUI-клиентыЯ рекомендую SourceTree
http://www.sourcetreeapp.com/
79
пятница, 18 октября 13 г.
GUI-клиентыИз GUI для Git просто необходим визуализатор истории...
80
пятница, 18 октября 13 г.
Спасибо за внимание!Есть вопросы?
пятница, 18 октября 13 г.