git for you

55
GIT If 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

Upload: pavel-alexeev

Post on 21-Jan-2017

164 views

Category:

Engineering


3 download

TRANSCRIPT

Page 1: Git for you

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

2

Удобство для разработки и

сопровождения

Page 3: Git for you

Коротко о главном• Локальные коммиты, распределённость• Куча настроек: цвета, предпочтения, хранение,

лимиты ресурсов, алиасы• Из коробки: подсветка 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

Краткая история GitОсновные требования

1.Скорость2.Простота дизайна3.Поддержка нелинейной разработки (тысячи параллельных

веток)4.Полная распределённость5.Возможность эффективной работы с такими большими

проектами, как ядро Linux (как по скорости, так и по размеру данных)

6.Поддержка различных workflow 4

Page 5: Git for you

Централизованные VCS

5

Page 6: Git for you

Распределённые СКВ

6

Page 7: Git for you

Отличия/Требования к Git

1. Почти все операции — локальные

2. Git следит за целостностью данных

3. Чаще всего данные в Git только добавляются

4. Три состояния

каталог Git’а (Git directory),

рабочий каталог (working directory),

область подготовленных файлов (staging area).

7

Page 8: Git for you

Small and fastBenchmarks

8

Page 9: Git for you

Small and fast

9

Page 10: Git for you

Множество опциональных настроек

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

Множество подкомманд

11

Page 12: Git for you

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 13: Git for you

Расширенный и удобный. Приступим.

13

Pavel Alekseev
[email protected], будем это переносить?
Page 14: Git for you

Удобный инструмент. Staging

14

svn commit != git commit

Page 15: Git for you

● svn tag != git tag. True read only.● branch не создаёт директорий - указатель на коммит● tag:

○ Annotated○ Lightweight Tags

Удобный инструмент.Бранчи и теги (метки, tag)

15

Page 16: Git for you

Удобный инструмент. Бранч на фичу

16

Pavel Alekseev
[email protected], может это тоже в твою часть? Или мне кратко упомянуть?
Page 17: Git for you

Удобный инструмент. --amend

17

Page 18: Git for you

Удобный инструмент. Merge fast forward

18

Pavel Alekseev
Transitions
Page 19: Git for you

Удобный инструмент. Rebase

19

Page 20: Git for you

Интерактивный 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

Pavel Alekseev
Transitions
Page 21: Git for you

Продолжаем знакомиться. Stash

21

Page 22: Git for you

Продолжаем знакомиться. 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

А всё ли смерджили из бранчей?

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

● Отслеживание изменений во внешних директориях

● Зависимость на уровне кода, а не артефактов

● Возможность изменять несколько, “сбор дерева”

● Отслеживается добавления подмодуля. Файл .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'

Pavel Alekseev
Transitions
Page 25: Git for you

Удобный инструмент. Репозитории

25

Page 26: Git for you

Достаточно email для передачи изменений

26

Page 27: Git for you

GUI под различные OS

27

Windows,

Linux, Mac

Free examplesMac

Windows, Mac

Page 28: Git for you

И много ещё полезного...

28

● Настраиваемая подсветка (diff/merge)● Настройка просмотра истории● git show - показ коммита и его изменений● Показ статистики изменений● git bisect - поиск внесённой ошибки● git cherry-pick - точечный перенос коммитов● Хуки на сервере● git mergetool - использование

любого инструмента слияния(Xcode, Idea, kDiff, meld)

● Настройка алиасов команд

Page 29: Git for you

Система менеджмента кода и ревью

Популярность инструмента растёт

Сервисы вроде https://github.com/, https://bitbucket.org

Интеграция со множеством систем (Jira)

Системы ревью кода. Использование бранчей. Gerrit, Phabricator, Gitosis, Gitlab, Review Board...

29

Об этом подробнее в следующей части

презентации

Page 30: Git for you

Использованные материалы

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

31

Бенефит для компании

Page 32: Git for you

Workflow.Существует 2 основных ветки: master и dev.

master — стабильная ветка, готовая к выкатыванию на production сервер в любой момент.dev — ветка, над которой в данный момент работает команда.В начале разработки master и dev ветки идентичны.

Pavel Alekseev
В своей части я рассамтриваю наиболее популярные известные Workflow.При этом, подробное описание на уровне команд (первые 10 слайдов) будут интересны в презентации для девелоперов, если таковая будет, но не на этапе "продажи идеи".Полагаю было бы куда более правильно описать и рассказать как наличие таких ворклоу может помочь компании. Например удобство введения ревью. Удобство настройки процессов в команде и т.д.
Page 33: Git for you
Page 34: Git for you

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

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

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

Workflow. Step 4

DEV branchto

Master branch

with team lead firewall

Page 38: Git for you

Workflow. Step 5. Testing & ReleaseКак только 1234-bug-login попадает в dev, Jenkins (система непрерывной интеграции) автоматически обновляет dev сервер из dev ветки. QA могут начинать тестировать и как итог подтвердить или переоткрыть задачу.

Если регрессионное тестирование успешно закончено, можно обновлять production сервер, при этом берется последний пакет (тот, на котором проходило тестирование), и именно он устанавливается на production сервер.

Page 39: Git for you

Code Review

Pavel Alekseev
Где привязка к Git?
Page 40: Git for you

Code Review

Page 41: Git for you

Integration with Git

41

Page 42: Git for you

Git as a service

Page 43: Git for you

Git as a serviceName GIT SVN HG Code

ReviewIssueTracker

Bitbucket

Codebase

GitHub

GitLab

Page 44: Git for you

Git as a local development process

Page 45: Git for you

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

Git user management

Page 47: Git for you

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

Git integration with Atlassian products

Page 49: Git for you

Git Integration with everything

Page 50: Git for you
Page 51: Git for you

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

Convert your existing Subversion project to Git

Import processes huge repositories, preserves all

the data and history

Page 53: Git for you

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.

Pavel Alekseev
Остались без освещения вопросы (как обсуждали ранее по списку https://docs.google.com/document/d/1YKc3y72SOW-KBp_CD4zAg1hlU5B7Cr8wRuq4rXSHAYs)1) Не нужность бакапов, при хостинге у себя2) Git internals. X-Delta алгоритм, использование сжатия, экономия ресурсов3) Docker на его основе4+) Хранение больших файлов на дополнительных решениях типа git-dist, git annex
Pavel Alekseev
Да, ещё один плюс нашёлся.На OnDemand Cloud JIRA (Unidata!) доступ к SVN может быть организован только с помощью Платных плагинов https://answers.atlassian.com/questions/162818/how-to-integrate-svn-to-jira-on-demand-account ( https://marketplace.atlassian.com/plugins/com.matrixreq.svnpluginpro/cloud/overview )
Page 54: Git for you

Price and Cloud VS Independence

54

Page 55: Git for you

Open Questions

55