Git for you
-
Upload
pavel-alexeev -
Category
Engineering
-
view
165 -
download
3
Transcript of Git for you
![Page 1: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/1.jpg)
GITIf you are using Subversion, stop it. Just stop.
Subversion = Leeches. Mercurial and Git = Antibiotics. We have better technology now.
© Joel Spolsky.
© Pavel Alexeev, Grigel Constantin, Igor Redkin. 2016
![Page 2: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/2.jpg)
2
Удобство для разработки и
сопровождения
![Page 3: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/3.jpg)
Коротко о главном• Локальные коммиты, распределённость• Куча настроек: цвета, предпочтения, хранение,
лимиты ресурсов, алиасы• Из коробки: подсветка diff, конверт line endings, visual
merge.• Отдельные commit и push/pull - работа над
“future”, staging, stash, merge, rebase, cherry-pick, --amend.
• Удобная передача коммитов, в том числе по почте без прямой доступности git patch/git am/git format-patch
• Xdelta алгоритм хранения - быстро, компактно• Open source! 3
![Page 4: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/4.jpg)
Краткая история GitОсновные требования
1.Скорость2.Простота дизайна3.Поддержка нелинейной разработки (тысячи параллельных
веток)4.Полная распределённость5.Возможность эффективной работы с такими большими
проектами, как ядро Linux (как по скорости, так и по размеру данных)
6.Поддержка различных workflow 4
![Page 5: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/5.jpg)
Централизованные VCS
5
![Page 6: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/6.jpg)
Распределённые СКВ
6
![Page 7: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/7.jpg)
Отличия/Требования к Git
1. Почти все операции — локальные
2. Git следит за целостностью данных
3. Чаще всего данные в Git только добавляются
4. Три состояния
каталог Git’а (Git directory),
рабочий каталог (working directory),
область подготовленных файлов (staging area).
7
![Page 8: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/8.jpg)
Small and fastBenchmarks
8
![Page 9: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/9.jpg)
Small and fast
9
![Page 10: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/10.jpg)
Множество опциональных настроек
1. git config
2. Виды конфигурации
Общие для всех пользователей системы (git config --system)
Настройки для конкретного пользователя (git config --global)
Конфигурационный файл в каталоге Git’а (git config)
3. Данные пользователя:
git config --global user.name "John Doe"
git config --global user.email [email protected]
10
![Page 11: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/11.jpg)
Множество подкомманд
11
![Page 12: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/12.jpg)
Any Workflow
12
Subversion-Style Workflow● very common● especially for transition
Integration Manager Workflow● Integration manager, lead● Many may clone and contribute● Pull/merge requests
Dictator and Lieutenants Workflow● For massive projects (kernel.org)● Delegate part of responsibility
![Page 14: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/14.jpg)
Удобный инструмент. Staging
14
svn commit != git commit
![Page 15: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/15.jpg)
● svn tag != git tag. True read only.● branch не создаёт директорий - указатель на коммит● tag:
○ Annotated○ Lightweight Tags
Удобный инструмент.Бранчи и теги (метки, tag)
15
![Page 16: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/16.jpg)
Удобный инструмент. Бранч на фичу
16
![Page 17: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/17.jpg)
Удобный инструмент. --amend
17
![Page 18: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/18.jpg)
Удобный инструмент. Merge fast forward
18
![Page 19: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/19.jpg)
Удобный инструмент. Rebase
19
![Page 20: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/20.jpg)
Интерактивный rebase
20
Зачем?# p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell
![Page 21: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/21.jpg)
Продолжаем знакомиться. Stash
21
![Page 22: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/22.jpg)
Продолжаем знакомиться. Revert
22
● На стадии stage: git checkout (git reset --hard отмена всего)● Если локально коммит был: git rebase -i● Push уже состоялся: git revert HEAD
○ Любая ревизия, относительно/абсолютно○ Можно диаппозон○ Можно указать сообщение или открыть редактор
$ git revert HEAD --no-edit[master 45fa96b] Revert "Oops, we didn't want this commit" 1 files changed, 1 insertions(+), 1 deletions(-)
$ git hist* 45fa96b 2011-03-09 | Revert "Oops, we didn't want this commit" (HEAD, master) [Pavel]
![Page 23: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/23.jpg)
А всё ли смерджили из бранчей?
23
● git branch --merged master lists branches merged into master
● git branch --merged lists branches merged into HEAD (i.e. tip of current branch)
● git branch --no-merged lists branches that have not been merged
● git merge-base command to find the latest common commit between the two branches
![Page 24: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/24.jpg)
● Отслеживание изменений во внешних директориях
● Зависимость на уровне кода, а не артефактов
● Возможность изменять несколько, “сбор дерева”
● Отслеживается добавления подмодуля. Файл .gitmodules. Отслеживается также бранч и версия
● Контент отдельно
● Можно использовать обновление (merge/fetch/pull/push) отдельно или для проекта целиком: git clone --recursive
Подмодули (подпроекты)
24
$ git submodule add https://github.com/chaconinc/DbConnectorCloning into 'DbConnector'...remote: Counting objects: 11, done.remote: Compressing objects: 100% (10/10), done.remote: Total 11 (delta 0), reused 11 (delta 0)Unpacking objects: 100% (11/11), done.Checking connectivity... done.
$ git statusOn branch masterYour branch is up-to-date with 'origin/master'.Changes to be committed:
new file: .gitmodulesnew file: DbConnector
$ git commit -am 'added DbConnector module'[master fb9093c] added DbConnector module 2 files changed, 4 insertions(+) create mode 100644 .gitmodules create mode 160000 DbConnector
$ git clone https://github.com/chaconinc/MainProject$ cd MainProject$ cd DbConnector/$ ls$
$ git submodule init$ git submodule updateCloning into 'DbConnector'...…
Submodule path 'DbConnector': checked out 'c3f01dc8862123d317dd46284b05b6892c7b29bc'
$ git clone --recursive https://github.com/chaconinc/MainProjectCloning into 'MainProject'...…
Submodule 'DbConnector' (https://github.com/chaconinc/DbConnector) registered for path DbConnector'Cloning into 'DbConnector'......
Submodule 'DbConnector': checked out 'c3f01dc8862123d317dd46284b05b6892c7b29bc'
![Page 25: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/25.jpg)
Удобный инструмент. Репозитории
25
![Page 26: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/26.jpg)
Достаточно email для передачи изменений
26
![Page 27: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/27.jpg)
GUI под различные OS
27
Windows,
Linux, Mac
Free examplesMac
Windows, Mac
![Page 28: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/28.jpg)
И много ещё полезного...
28
● Настраиваемая подсветка (diff/merge)● Настройка просмотра истории● git show - показ коммита и его изменений● Показ статистики изменений● git bisect - поиск внесённой ошибки● git cherry-pick - точечный перенос коммитов● Хуки на сервере● git mergetool - использование
любого инструмента слияния(Xcode, Idea, kDiff, meld)
● Настройка алиасов команд
![Page 29: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/29.jpg)
Система менеджмента кода и ревью
Популярность инструмента растёт
Сервисы вроде https://github.com/, https://bitbucket.org
Интеграция со множеством систем (Jira)
Системы ревью кода. Использование бранчей. Gerrit, Phabricator, Gitosis, Gitlab, Review Board...
29
Об этом подробнее в следующей части
презентации
![Page 30: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/30.jpg)
Использованные материалы
1. http://zzet.org/learn-git/lection-1.html?full#21
2. http://git-scm.com/about/
3. http://www.slideshare.net/MikhailVasilyev/git-subversion-12256851
4. http://www.slideshare.net/demiazz/git-14357600
5. http://www.slideshare.net/oelifantiev/git-27341307
6. http://www.slideshare.net/opedge/git-33590567
7. http://www.slideshare.net/Unomano/ss-32855881
8. http://www.slideshare.net/phpdevby/git-11216260
9. https://www.atlassian.com/git/articles/10-years-of-git/
10. https://git-scm.com/download/gui/linux
11. https://githowto.com/ru/undoing_committed_changes?ref=driverlayer.com%2Fweb
12. https://git-scm.com/book/ru/v1/%D0%92%D0%B5%D1%82%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B2-Git-%D0%A7%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-%D0%B2%D0%B5%D1%82%D0%BA%D0%B0%3F
13. http://stackoverflow.com/questions/226976/how-can-i-know-in-git-if-a-branch-has-been-already-merged-into-master
14. https://git-scm.com/book/en/v2/Git-Tools-Submodules
30
![Page 31: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/31.jpg)
31
Бенефит для компании
![Page 32: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/32.jpg)
Workflow.Существует 2 основных ветки: master и dev.
master — стабильная ветка, готовая к выкатыванию на production сервер в любой момент.dev — ветка, над которой в данный момент работает команда.В начале разработки master и dev ветки идентичны.
![Page 33: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/33.jpg)
![Page 34: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/34.jpg)
Workflow. Step 1Когда программист начинает работу над новым дефектом / функционалом, он должен переключиться на ветку dev и получить ее последнюю версию.
git checkout dev
git pull origin devК примеру, разработчик хочет начать исправлять дефект страницы аутентификации. Номер ошибки на Github — 1234. Разработчик должен создать новую ветку из dev
git checkout -b 1234-bug-login1234-bug-login это только пример. Первым словом должен быть номер дефекта, вторым — bug / feature, а дальше — описание проблемы.
![Page 35: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/35.jpg)
Workflow. Step 2Далее разработчик продолжает работу локально: делает изменения, коммиты и т.д. Commit-cообщения должны содержать номер ошибки и техническое описание
git add ...list of files...
git commit -m "#1234"Итак, разработка окончена, и теперь необходимо отправить изменения на Github
git push origin 1234-bug-loginВсе изменения теперь в репозитории. После этого разработчику необходимо обновить свою ветку из dev, чтобы иметь возможность слить ее без конфликтов.
![Page 36: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/36.jpg)
Workflow. Step 3Сперва необходимо получить последнюю версию dev ветки
git checkout dev
git pull origin dev
И затем влить все изменения, которые произошли в dev ветке, в свою ветку (1234-bug-login)
git checkout 1234-bug-login
git rebase dev
git push -f origin 1234-bug-login
![Page 37: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/37.jpg)
Workflow. Step 4
DEV branchto
Master branch
with team lead firewall
![Page 38: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/38.jpg)
Workflow. Step 5. Testing & ReleaseКак только 1234-bug-login попадает в dev, Jenkins (система непрерывной интеграции) автоматически обновляет dev сервер из dev ветки. QA могут начинать тестировать и как итог подтвердить или переоткрыть задачу.
Если регрессионное тестирование успешно закончено, можно обновлять production сервер, при этом берется последний пакет (тот, на котором проходило тестирование), и именно он устанавливается на production сервер.
![Page 39: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/39.jpg)
Code Review
![Page 40: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/40.jpg)
Code Review
![Page 41: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/41.jpg)
Integration with Git
41
![Page 42: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/42.jpg)
Git as a service
![Page 43: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/43.jpg)
Git as a serviceName GIT SVN HG Code
ReviewIssueTracker
Bitbucket
Codebase
GitHub
GitLab
![Page 44: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/44.jpg)
Git as a local development process
![Page 45: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/45.jpg)
GitLab and all the rest
45
Name Language Activity License
Gitlab Ruby Yes Open Source
Stash Java Yes Comercial
Gerrit Java Yes Apache License 2.0
Gitblit Java Yes Apache License 2.0
![Page 46: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/46.jpg)
Git user management
![Page 47: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/47.jpg)
Git backup process● Each copy is full
backup● Distributed storage● File-system copy● Git bundle● Gcrypt remote● Mirror remote● Live mirror● Backup As A Service
![Page 48: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/48.jpg)
Git integration with Atlassian products
![Page 49: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/49.jpg)
Git Integration with everything
![Page 50: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/50.jpg)
![Page 51: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/51.jpg)
Git with zero downtime
Git-SVN mirror of existing Subversion repository.
Push to Git or commit to Subversion at your convenience
![Page 52: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/52.jpg)
Convert your existing Subversion project to Git
Import processes huge repositories, preserves all
the data and history
![Page 53: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/53.jpg)
ADD TO BITBUCKET SERVER
SVN Mirror for Atlassian Bitbucket Server
(formerly known as Atlassian Stash) will pull
your existing Subversion project right into
Bitbucket Server, as a one-time import or full-
featured bi-directional mirror.
![Page 54: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/54.jpg)
Price and Cloud VS Independence
54
![Page 55: Git for you](https://reader035.fdocuments.net/reader035/viewer/2022062316/5882e98f1a28ab33258b7bbf/html5/thumbnails/55.jpg)
Open Questions
55