SlideShare a Scribd company logo
GIT IS YOUR FRIEND
ЧТО ТАКОЕ VCS?
Совсем для начинающих:
• Что такое системы управления версиями?
• Зачем они нужны?
• Как с ними работают?
ТЕРМИНОЛОГИЯ
•   Репозиторий (repository);
•   Рабочая копия (working copy);
•   Ветка (branch);
•   Набор изменений (changeset);
•   «Голова» (head);
•   Слияние (merge);
•   Конфликт (conflict);
•   Фиксация (commit);
•   Перенос точки ветвления (rebase);
•   Откладывание изменений (shelving);
•   Ревизия (revision);
•   Тег (tag);
•   Синхронизация (sync).
SERVER OR NOT
• Централизованные системы управления версиями;
• Сильные и слабые стороны;
• Децентрализованные системы управления версиями;
• Сильные и слабые стороны;
• Чем выделяется Git, и почему он так хорош?
ОСОБЕННОСТИ GIT
• Git репозитории;
• Децентрализация;
• Git не о файлах, Git о патчах;
• Git не о копиях репозитория, Git о ветках;
• Кунг-фу Git, сильнее других.
ПРЕИМУЩЕСТВА
• Высокая производительность;
• Средства интеграции;
• Продуманная система команд;
• Качественный веб-интерфейс из коробки;
• Легкость настройки любой конфигурации и
  встраивания в рабочий процесс.
НЕДОСТАТКИ
• Плохая переносимость не на Unix системы;
• Не отслеживает каталоги;
• У некоторых возникают проблемы с переносом
  файлов;
• Плохо работает с большими объемами бинарных
  данных;
• Многие просто не осилили (=
GIT EVERYDAY
БАЗОВЫЕ КОМАНДЫ
•   init;
•   branch;
•   log;
•   checkout;
•   add и rm;
•   diff;
•   commit;
•   reset;
•   merge;
•   rebase;
•   tag.
GIT EVERYDAY
ДЛЯ КОМАНДЫ
• clone;
• pull и fetch;
• push;
• format-patch;
• am;
• pull;
• revert.
GIT FLOW
• A successful Git branching model;
• Была предложена Vincent Driessen;
• Проверена автором:
   • использовалась модель в рабочих проектах;
   • использовалась в рабочих проектах.
ВЗГЛЯД СВЕРХУ
Данная модель позволяет
максимально эффективно
использовать возможности
Git при разработке
программного
обеспечения, а также
организовать на основе
этой модели правильную
модель релизов и выкатки
на production.
ПОЧЕМУ GIT?
• CVS/SVN консервативны;
• Управление ветками – одна из сложнейших задач на
  крупных проектах под управлением CVS/SVN;
• Git базируется на идее активного использования веток;
• Представленная модель не панацея и не открытие. Она
  просто работает, и может работать у многих.
• Нашли свое лучшее решение? Используйте его.
GIT ЦЕНТРАЛИЗАЦИЯ
   •   Централизация условна;
   •   Команда сама принимает
       соглашение по поводу
       централизации и работы;
   •   Каждый разработчик может
       обмениваться в
       двустороннем порядке с
       центральным
       репозиторием;
   •   Каждый разработчик может
       обмениваться в
       двустороннем порядке с
       репозиториями других
       разработчиков, в обход
       центрального.
ГЛАВНЫЕ ВЕТКИ
   •   Две центральные ветки:
       •   master;
       •   develop.
   •   Святая святых:
       •   origin/master;
       •   origin/develop.
   •   HEAD origin/master:
       •   production ready;
       •   только релизы.
   •   HEAD origin/develop:
       •   integration branch;
       •   ночные сборки.
ДОПОЛНИТЕЛЬНЫЕ
ВЕТКИ
• Три типа дополнительных веток:
   • feature;
   • release;
   • hotfix.
• Каждая ветка для своих задач.
• Специальные – не технически, а логически.
• Используйте соглашения внутри команды.
FEATURE ВЕТКИ
   •   Наследуются только от
       develop;
   •   Сливаются обратно только в
       develop;
   •   Имя ветки может быть любым,
       кроме master, develop, release-*,
       hotfix-*;
   •   Рекомендую именовать:
        • feature-name;
        • feature-task-number.
   •   Не сливать в origin;
   •   Только в локальных
       репозиториях.
FEATURE
LIFE CYCLE
Создание ветки:
$ git checkout -b myfeature develop
Switched to a new branch "myfeature»
Конец жизненного цикла ветки:
$ git checkout develop
Switched to branch 'develop'
$ git merge --no-ff myfeature
Updating ea1b82a..05e9557
(Summary of changes)
$ git branch -d myfeature
Deleted branch myfeature (was 05e9557).
$ git push origin develop
FEATURE - DEVELOP
RELEASE ВЕТКИ
• Ветвление этих веток может быть произведено только
  от develop;
• Эти ветки должны сливаться обратно в develop и в
  master;
• Имя ветки должно быть формата release-*;
• Предназначены для подготовки релиза продукта;
• Пока не выпущен релиз, весь оставшийся код ждет
  окончания выпуска релиза;
• Релиз получает номер версии именно при создании
  этих веток.
RELEASE - СОЗДАНИЕ
Создание release ветки
$ git checkout -b release-1.2 develop
Switched to a new branch "release-1.2"
$ ./bump-version.sh 1.2
Files modified successfully, version bumped to 1.2.
$ git commit -a -m "Bumped version number to 1.2"
[release-1.2 74d9424] Bumped version number to 1.2
1 files changed, 1 insertions(+), 1 deletions(-)
RELEASE
ЧТО ДЕЛАТЬ?
• Обновление версии во всем исходном коде, где она
  есть;
• Тщательно проверяется исходный код, проводится
  тестирование, исправляются недочеты;
• Никакого нового функционала не добавлять (!).
RELEASE - ЗАКРЫТИЕ
Закрытие ветки идет в три этапа:
• Выпуск релиза;
• Изменения из ветки возвращаются в develop ветку;
• Удаление ветки.
RELEASE – ЗАКРЫТИЕ
ШАГ ПЕРВЫЙ
Производится выпуск релиза
$ git checkout master
Switched to branch 'master'
$ git merge --no-ff release-1.2
Merge made by recursive.
(Summary of changes)
$ git tag -a 1.2
RELEASE – ЗАКРЫТИЕ
ШАГ ВТОРОЙ
Возвращение изменения обратно в develop
$ git checkout develop
Switched to branch 'develop'
$ git merge --no-ff release-1.2
Merge made by recursive.
(Summary of changes)
RELEASE – ЗАКРЫТИЕ
ШАГ ТРЕТИЙ
Удаление ветки
$ git branch -d release-1.2
Deleted branch release-1.2 (was ff452fe).
HOTFIX ВЕТКИ
   •   Ветвление этих веток
       может быть
       произведено только от
       master;
   •   Эти ветки должны
       объединяться обратно
       c master и develop;
   •   Имя ветки должно быть
       формата hotfix-*;
   •   Это те же release-ветки,
       только для выпуска
       незапланированных
       релизов (bugfix
       релизов);
HOTFIX - СОЗДАНИЕ
Ветка создается ветвлением от ветки master
$ git checkout -b hotfix-1.2.1 master
Switched to a new branch "hotfix-1.2.1"
$ ./bump-version.sh 1.2.1
Files modified successfully, version bumped to 1.2.1.
$ git commit -a -m "Bumped version number to 1.2.1"
[hotfix-1.2.1 41e61bb] Bumped version number to 1.2.1
1 files changed, 1 insertions(+), 1 deletions(-)
HOTFIX – ЗАКРЫТИЕ
ШАГ ПЕРВЫЙ
Производятся нужные изменения для исправления ошибки
$ git commit -m "Fixed severe production problem"
[hotfix-1.2.1 abbe5d6] Fixed severe production
problem
5 files changed, 32 insertions(+), 17 deletions(-)
HOTFIX – ЗАКРЫТИЕ
ШАГ ВТОРОЙ
Слив изменений в master и обновление тега
$ git checkout master
Switched to branch 'master'
$ git merge --no-ff hotfix-1.2.1
Merge made by recursive.
(Summary of changes)
$ git tag -a 1.2.1
HOTFIX – ЗАКРЫТИЕ
ШАГ ТРЕТИЙ
Занесение изменений в develop ветку
$ git checkout develop
Switched to branch 'develop'
$ git merge --no-ff hotfix-1.2.1
Merge made by recursive.
(Summary of changes)
HOTFIX – ЗАКРЫТИЕ
ШАГ ЧЕТВЕРТЫЙ
Удаление ветки
$ git branch -d hotfix-1.2.1
Deleted branch hotfix-1.2.1 (was abbe5d6).
АВТОМАТИЗАЦИЯ
• Методика уже автоматизирована.
• Существует готовый набор скриптов:
  https://github.com/nvie/gitflow
ИСПОЛЬЗОВАНИЕ
•   git flow init [-d] (-d применяет дефолтные настройки);
•   git flow feature
•   git flow feature start <name> [<base>]
•   git flow feature finish <name>
•   git flow feature publish <name>
•   git flow feature pull <remote> <name>
•   git flow release
•   git flow release start <release> [<base>]
•   git flow release finish <release>
•   git flow hotfix
•   git flow hotfix start <release> [<base>]
•   git flow hotfix finish <release>
•   git flow support
•   git flow support start <release> <base>
GIT FLOW И DEPLOY
• На production сервер выкатываются версии только из
  origin/master;
• На staging сервер выкатываются версии только из
  origin/develop;
• Для автоматизации выкатки можно использовать git
  hooks.
ВОПРОСЫ?
ВСЕМ СПАСИБО ЗА ВНИМАНИЕ (=

More Related Content

What's hot

Git для новичков
Git для новичковGit для новичков
Git для новичковSoftline
 
Основы Git
Основы GitОсновы Git
Основы Git
oelifantiev
 
Основы работы с Git
Основы работы с GitОсновы работы с Git
Основы работы с Git
Denis Latushkin
 
Git presentation
Git presentationGit presentation
Git presentation
Alexandr Babenko
 
Git для начинающих
Git для начинающихGit для начинающих
Git для начинающих
Vadim Drobinin
 
Git for you
Git for youGit for you
Git for you
Pavel Alexeev
 
Git (presentation)
Git (presentation)Git (presentation)
Git (presentation)
Anton Ivanov
 
Minimal Version Selection - dependency management in Go 1.11, Golang Meetup 0...
Minimal Version Selection - dependency management in Go 1.11, Golang Meetup 0...Minimal Version Selection - dependency management in Go 1.11, Golang Meetup 0...
Minimal Version Selection - dependency management in Go 1.11, Golang Meetup 0...
Ivan Korolev
 
Giflow
GiflowGiflow
Giflow
Egor Petrov
 
Chebit.Git
Chebit.GitChebit.Git
Chebit.Git
Dmitry Maksimov
 
Jenkins Imperative Pipeline vs Declarative Pipeline
Jenkins Imperative Pipeline vs Declarative Pipeline Jenkins Imperative Pipeline vs Declarative Pipeline
Jenkins Imperative Pipeline vs Declarative Pipeline
Кирилл Толкачёв
 
Системы управления версиями (VCS). Знакомство с Git.
Системы управления версиями (VCS). Знакомство с Git.Системы управления версиями (VCS). Знакомство с Git.
Системы управления версиями (VCS). Знакомство с Git.
Dmytro Olaresko
 
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
Fwdays
 
Git
GitGit
Release management with Gradle #JokerConf2016
Release management with Gradle #JokerConf2016Release management with Gradle #JokerConf2016
Release management with Gradle #JokerConf2016
Кирилл Толкачёв
 
Git для продолжающих
Git для продолжающихGit для продолжающих
Git для продолжающихIvan Evtukhovich
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Oleg Nenashev
 
Сергей Мелашич "Настройка SEO для одностраничных web-приложений на Angular"
Сергей Мелашич "Настройка SEO для одностраничных web-приложений на Angular"Сергей Мелашич "Настройка SEO для одностраничных web-приложений на Angular"
Сергей Мелашич "Настройка SEO для одностраничных web-приложений на Angular"
Fwdays
 

What's hot (20)

Git для новичков
Git для новичковGit для новичков
Git для новичков
 
Основы Git
Основы GitОсновы Git
Основы Git
 
Gitlab devconf
Gitlab devconfGitlab devconf
Gitlab devconf
 
Основы работы с Git
Основы работы с GitОсновы работы с Git
Основы работы с Git
 
Git presentation
Git presentationGit presentation
Git presentation
 
Git для начинающих
Git для начинающихGit для начинающих
Git для начинающих
 
Git basis
Git basisGit basis
Git basis
 
Git for you
Git for youGit for you
Git for you
 
Git (presentation)
Git (presentation)Git (presentation)
Git (presentation)
 
Minimal Version Selection - dependency management in Go 1.11, Golang Meetup 0...
Minimal Version Selection - dependency management in Go 1.11, Golang Meetup 0...Minimal Version Selection - dependency management in Go 1.11, Golang Meetup 0...
Minimal Version Selection - dependency management in Go 1.11, Golang Meetup 0...
 
Giflow
GiflowGiflow
Giflow
 
Chebit.Git
Chebit.GitChebit.Git
Chebit.Git
 
Jenkins Imperative Pipeline vs Declarative Pipeline
Jenkins Imperative Pipeline vs Declarative Pipeline Jenkins Imperative Pipeline vs Declarative Pipeline
Jenkins Imperative Pipeline vs Declarative Pipeline
 
Системы управления версиями (VCS). Знакомство с Git.
Системы управления версиями (VCS). Знакомство с Git.Системы управления версиями (VCS). Знакомство с Git.
Системы управления версиями (VCS). Знакомство с Git.
 
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
 
Git
GitGit
Git
 
Release management with Gradle #JokerConf2016
Release management with Gradle #JokerConf2016Release management with Gradle #JokerConf2016
Release management with Gradle #JokerConf2016
 
Git для продолжающих
Git для продолжающихGit для продолжающих
Git для продолжающих
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
 
Сергей Мелашич "Настройка SEO для одностраничных web-приложений на Angular"
Сергей Мелашич "Настройка SEO для одностраничных web-приложений на Angular"Сергей Мелашич "Настройка SEO для одностраничных web-приложений на Angular"
Сергей Мелашич "Настройка SEO для одностраничных web-приложений на Angular"
 

Viewers also liked

системы контроля версий
системы контроля версийсистемы контроля версий
системы контроля версийNicki Feathers
 
Разработка по с использованием Tfs 2012
Разработка по с использованием Tfs 2012Разработка по с использованием Tfs 2012
Разработка по с использованием Tfs 2012Александр Шамрай
 
Antipatterns in software (ru)
Antipatterns in software (ru)Antipatterns in software (ru)
Antipatterns in software (ru)
Borys Lebeda
 
ук 03.003.01 2011
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011etyumentcev
 
Алексей Раменский (Тэглайн) | Обзор рынка российской заказной веб-разработки ...
Алексей Раменский (Тэглайн) | Обзор рынка российской заказной веб-разработки ...Алексей Раменский (Тэглайн) | Обзор рынка российской заказной веб-разработки ...
Алексей Раменский (Тэглайн) | Обзор рынка российской заказной веб-разработки ...
RIF-Technology
 
Шаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. ВведниеШаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. ВведниеSergey Nemchinsky
 
Git для тестировщиков
Git для тестировщиковGit для тестировщиков
Git для тестировщиков
SQALab
 
Распределенные системы контоля версия на примере git
Распределенные системы контоля версия на примере gitРаспределенные системы контоля версия на примере git
Распределенные системы контоля версия на примере git
Ivan Evtukhovich
 
Сергей Сергеев "Менеджмент кода, или Почему SCM"
Сергей Сергеев "Менеджмент кода, или Почему SCM"Сергей Сергеев "Менеджмент кода, или Почему SCM"
Сергей Сергеев "Менеджмент кода, или Почему SCM"
Yandex
 
A Piece of case.
A Piece of case.A Piece of case.
A Piece of case.
TBWA\Moscow
 
Сергей Сергеев — Maintainer кода в большом проекте
Сергей Сергеев — Maintainer кода в большом проектеСергей Сергеев — Maintainer кода в большом проекте
Сергей Сергеев — Maintainer кода в большом проекте
Yandex
 
Успешная карьера в современной разработки программного обеспечения
Успешная карьера в современной разработки программного обеспеченияУспешная карьера в современной разработки программного обеспечения
Успешная карьера в современной разработки программного обеспечения
Sergey Morgunov
 
Адаптация Git flow при коллективной разработке на 1с
Адаптация Git flow при коллективной разработке на 1сАдаптация Git flow при коллективной разработке на 1с
Адаптация Git flow при коллективной разработке на 1с
Alexey Lustin
 
Шаблонизируй это. Как паттерны требований облегчают жизнь аналитика
Шаблонизируй это. Как паттерны требований облегчают жизнь аналитикаШаблонизируй это. Как паттерны требований облегчают жизнь аналитика
Шаблонизируй это. Как паттерны требований облегчают жизнь аналитика
SQALab
 
Шаблоны проектирования баз данных — Введение
Шаблоны проектирования баз данных — ВведениеШаблоны проектирования баз данных — Введение
Шаблоны проектирования баз данных — Введение
Denis Beskov
 
Continuous delivery в крупном интернет проекте
Continuous delivery в крупном интернет проектеContinuous delivery в крупном интернет проекте
Continuous delivery в крупном интернет проекте
SQALab
 
Основы работы с Git
Основы работы с GitОсновы работы с Git
Основы работы с Git
Andrey Akinshin
 
iron man
iron maniron man
iron man
Siddharth Sahu
 
Фронтенд для рубиста
Фронтенд для рубистаФронтенд для рубиста
Фронтенд для рубиста
Kir Shatrov
 

Viewers also liked (20)

системы контроля версий
системы контроля версийсистемы контроля версий
системы контроля версий
 
Разработка по с использованием Tfs 2012
Разработка по с использованием Tfs 2012Разработка по с использованием Tfs 2012
Разработка по с использованием Tfs 2012
 
Antipatterns in software (ru)
Antipatterns in software (ru)Antipatterns in software (ru)
Antipatterns in software (ru)
 
ук 03.003.01 2011
ук 03.003.01 2011ук 03.003.01 2011
ук 03.003.01 2011
 
Алексей Раменский (Тэглайн) | Обзор рынка российской заказной веб-разработки ...
Алексей Раменский (Тэглайн) | Обзор рынка российской заказной веб-разработки ...Алексей Раменский (Тэглайн) | Обзор рынка российской заказной веб-разработки ...
Алексей Раменский (Тэглайн) | Обзор рынка российской заказной веб-разработки ...
 
Шаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. ВведниеШаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. Введние
 
Git для тестировщиков
Git для тестировщиковGit для тестировщиков
Git для тестировщиков
 
Распределенные системы контоля версия на примере git
Распределенные системы контоля версия на примере gitРаспределенные системы контоля версия на примере git
Распределенные системы контоля версия на примере git
 
Сергей Сергеев "Менеджмент кода, или Почему SCM"
Сергей Сергеев "Менеджмент кода, или Почему SCM"Сергей Сергеев "Менеджмент кода, или Почему SCM"
Сергей Сергеев "Менеджмент кода, или Почему SCM"
 
A Piece of case.
A Piece of case.A Piece of case.
A Piece of case.
 
Сергей Сергеев — Maintainer кода в большом проекте
Сергей Сергеев — Maintainer кода в большом проектеСергей Сергеев — Maintainer кода в большом проекте
Сергей Сергеев — Maintainer кода в большом проекте
 
Git flow
Git flowGit flow
Git flow
 
Успешная карьера в современной разработки программного обеспечения
Успешная карьера в современной разработки программного обеспеченияУспешная карьера в современной разработки программного обеспечения
Успешная карьера в современной разработки программного обеспечения
 
Адаптация Git flow при коллективной разработке на 1с
Адаптация Git flow при коллективной разработке на 1сАдаптация Git flow при коллективной разработке на 1с
Адаптация Git flow при коллективной разработке на 1с
 
Шаблонизируй это. Как паттерны требований облегчают жизнь аналитика
Шаблонизируй это. Как паттерны требований облегчают жизнь аналитикаШаблонизируй это. Как паттерны требований облегчают жизнь аналитика
Шаблонизируй это. Как паттерны требований облегчают жизнь аналитика
 
Шаблоны проектирования баз данных — Введение
Шаблоны проектирования баз данных — ВведениеШаблоны проектирования баз данных — Введение
Шаблоны проектирования баз данных — Введение
 
Continuous delivery в крупном интернет проекте
Continuous delivery в крупном интернет проектеContinuous delivery в крупном интернет проекте
Continuous delivery в крупном интернет проекте
 
Основы работы с Git
Основы работы с GitОсновы работы с Git
Основы работы с Git
 
iron man
iron maniron man
iron man
 
Фронтенд для рубиста
Фронтенд для рубистаФронтенд для рубиста
Фронтенд для рубиста
 

Similar to Git

Про Git
Про GitПро Git
Про Git
Elena Grahovac
 
Системы управления версиями (VCS). Знакомство с Git.
Системы управления версиями (VCS). Знакомство с Git.Системы управления версиями (VCS). Знакомство с Git.
Системы управления версиями (VCS). Знакомство с Git.DrupalForumZP2012
 
базовые принципы работы с Git
базовые принципы работы с Gitбазовые принципы работы с Git
базовые принципы работы с Git
DressTester
 
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...it-people
 
GIT: что внутри, и как это работает?
GIT: что внутри, и как это работает?GIT: что внутри, и как это работает?
GIT: что внутри, и как это работает?
Tados
 
GIT Slides (25.03.2015)
GIT Slides (25.03.2015)GIT Slides (25.03.2015)
GIT Slides (25.03.2015)
Ilya V
 
Scino: DVCS на примере Git
Scino: DVCS на примере GitScino: DVCS на примере Git
Scino: DVCS на примере Git
SCINO
 
Релиз менеджмент в Badoo (Илья Агеев)
Релиз менеджмент в Badoo (Илья Агеев)Релиз менеджмент в Badoo (Илья Агеев)
Релиз менеджмент в Badoo (Илья Агеев)Ontico
 
Badoo presentation-2012-rit-ageev
Badoo presentation-2012-rit-ageevBadoo presentation-2012-rit-ageev
Badoo presentation-2012-rit-ageevYuriy Nasretdinov
 
Git - Вадим Валуев
Git - Вадим ВалуевGit - Вадим Валуев
Git - Вадим Валуев
DrupalCamp MSK
 
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
2ГИС Технологии
 
Релиз-инжениринг Mail.ru. Взгляд изнутри. Максим Глеков, Mail.Ru Group, Москва
 Релиз-инжениринг Mail.ru. Взгляд изнутри. Максим Глеков, Mail.Ru Group, Москва  Релиз-инжениринг Mail.ru. Взгляд изнутри. Максим Глеков, Mail.Ru Group, Москва
Релиз-инжениринг Mail.ru. Взгляд изнутри. Максим Глеков, Mail.Ru Group, Москва
it-people
 
Jiramania презентации @augspb
Jiramania презентации   @augspbJiramania презентации   @augspb
Jiramania презентации @augspb
Gonchik Tsymzhitov
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And Forge
Yehor Herasymchuk
 
обзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторингаобзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторинга
Константин Никифоров
 
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
Ontico
 
Спецкурс-2015. Занятие 05. Системы контроля версий
Спецкурс-2015. Занятие 05. Системы контроля версийСпецкурс-2015. Занятие 05. Системы контроля версий
Спецкурс-2015. Занятие 05. Системы контроля версий
7bits
 
Доклад Владислава Чернова & Олега Оямяэ на РИТ++ 2013. "AIDA. Непрерывная инт...
Доклад Владислава Чернова & Олега Оямяэ на РИТ++ 2013. "AIDA. Непрерывная инт...Доклад Владислава Чернова & Олега Оямяэ на РИТ++ 2013. "AIDA. Непрерывная инт...
Доклад Владислава Чернова & Олега Оямяэ на РИТ++ 2013. "AIDA. Непрерывная инт...
Badoo Development
 

Similar to Git (20)

GitFlow_MOEX
GitFlow_MOEXGitFlow_MOEX
GitFlow_MOEX
 
Про Git
Про GitПро Git
Про Git
 
Системы управления версиями (VCS). Знакомство с Git.
Системы управления версиями (VCS). Знакомство с Git.Системы управления версиями (VCS). Знакомство с Git.
Системы управления версиями (VCS). Знакомство с Git.
 
базовые принципы работы с Git
базовые принципы работы с Gitбазовые принципы работы с Git
базовые принципы работы с Git
 
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
 
GIT: что внутри, и как это работает?
GIT: что внутри, и как это работает?GIT: что внутри, и как это работает?
GIT: что внутри, и как это работает?
 
GIT Slides (25.03.2015)
GIT Slides (25.03.2015)GIT Slides (25.03.2015)
GIT Slides (25.03.2015)
 
Приручаем Git
Приручаем GitПриручаем Git
Приручаем Git
 
Scino: DVCS на примере Git
Scino: DVCS на примере GitScino: DVCS на примере Git
Scino: DVCS на примере Git
 
Релиз менеджмент в Badoo (Илья Агеев)
Релиз менеджмент в Badoo (Илья Агеев)Релиз менеджмент в Badoo (Илья Агеев)
Релиз менеджмент в Badoo (Илья Агеев)
 
Badoo presentation-2012-rit-ageev
Badoo presentation-2012-rit-ageevBadoo presentation-2012-rit-ageev
Badoo presentation-2012-rit-ageev
 
Git - Вадим Валуев
Git - Вадим ВалуевGit - Вадим Валуев
Git - Вадим Валуев
 
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
 
Релиз-инжениринг Mail.ru. Взгляд изнутри. Максим Глеков, Mail.Ru Group, Москва
 Релиз-инжениринг Mail.ru. Взгляд изнутри. Максим Глеков, Mail.Ru Group, Москва  Релиз-инжениринг Mail.ru. Взгляд изнутри. Максим Глеков, Mail.Ru Group, Москва
Релиз-инжениринг Mail.ru. Взгляд изнутри. Максим Глеков, Mail.Ru Group, Москва
 
Jiramania презентации @augspb
Jiramania презентации   @augspbJiramania презентации   @augspb
Jiramania презентации @augspb
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And Forge
 
обзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторингаобзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторинга
 
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
 
Спецкурс-2015. Занятие 05. Системы контроля версий
Спецкурс-2015. Занятие 05. Системы контроля версийСпецкурс-2015. Занятие 05. Системы контроля версий
Спецкурс-2015. Занятие 05. Системы контроля версий
 
Доклад Владислава Чернова & Олега Оямяэ на РИТ++ 2013. "AIDA. Непрерывная инт...
Доклад Владислава Чернова & Олега Оямяэ на РИТ++ 2013. "AIDA. Непрерывная инт...Доклад Владислава Чернова & Олега Оямяэ на РИТ++ 2013. "AIDA. Непрерывная инт...
Доклад Владислава Чернова & Олега Оямяэ на РИТ++ 2013. "AIDA. Непрерывная инт...
 

Git

  • 1. GIT IS YOUR FRIEND
  • 2. ЧТО ТАКОЕ VCS? Совсем для начинающих: • Что такое системы управления версиями? • Зачем они нужны? • Как с ними работают?
  • 3. ТЕРМИНОЛОГИЯ • Репозиторий (repository); • Рабочая копия (working copy); • Ветка (branch); • Набор изменений (changeset); • «Голова» (head); • Слияние (merge); • Конфликт (conflict); • Фиксация (commit); • Перенос точки ветвления (rebase); • Откладывание изменений (shelving); • Ревизия (revision); • Тег (tag); • Синхронизация (sync).
  • 4. SERVER OR NOT • Централизованные системы управления версиями; • Сильные и слабые стороны; • Децентрализованные системы управления версиями; • Сильные и слабые стороны; • Чем выделяется Git, и почему он так хорош?
  • 5. ОСОБЕННОСТИ GIT • Git репозитории; • Децентрализация; • Git не о файлах, Git о патчах; • Git не о копиях репозитория, Git о ветках; • Кунг-фу Git, сильнее других.
  • 6. ПРЕИМУЩЕСТВА • Высокая производительность; • Средства интеграции; • Продуманная система команд; • Качественный веб-интерфейс из коробки; • Легкость настройки любой конфигурации и встраивания в рабочий процесс.
  • 7. НЕДОСТАТКИ • Плохая переносимость не на Unix системы; • Не отслеживает каталоги; • У некоторых возникают проблемы с переносом файлов; • Плохо работает с большими объемами бинарных данных; • Многие просто не осилили (=
  • 8. GIT EVERYDAY БАЗОВЫЕ КОМАНДЫ • init; • branch; • log; • checkout; • add и rm; • diff; • commit; • reset; • merge; • rebase; • tag.
  • 9. GIT EVERYDAY ДЛЯ КОМАНДЫ • clone; • pull и fetch; • push; • format-patch; • am; • pull; • revert.
  • 10. GIT FLOW • A successful Git branching model; • Была предложена Vincent Driessen; • Проверена автором: • использовалась модель в рабочих проектах; • использовалась в рабочих проектах.
  • 11. ВЗГЛЯД СВЕРХУ Данная модель позволяет максимально эффективно использовать возможности Git при разработке программного обеспечения, а также организовать на основе этой модели правильную модель релизов и выкатки на production.
  • 12. ПОЧЕМУ GIT? • CVS/SVN консервативны; • Управление ветками – одна из сложнейших задач на крупных проектах под управлением CVS/SVN; • Git базируется на идее активного использования веток; • Представленная модель не панацея и не открытие. Она просто работает, и может работать у многих. • Нашли свое лучшее решение? Используйте его.
  • 13. GIT ЦЕНТРАЛИЗАЦИЯ • Централизация условна; • Команда сама принимает соглашение по поводу централизации и работы; • Каждый разработчик может обмениваться в двустороннем порядке с центральным репозиторием; • Каждый разработчик может обмениваться в двустороннем порядке с репозиториями других разработчиков, в обход центрального.
  • 14. ГЛАВНЫЕ ВЕТКИ • Две центральные ветки: • master; • develop. • Святая святых: • origin/master; • origin/develop. • HEAD origin/master: • production ready; • только релизы. • HEAD origin/develop: • integration branch; • ночные сборки.
  • 15. ДОПОЛНИТЕЛЬНЫЕ ВЕТКИ • Три типа дополнительных веток: • feature; • release; • hotfix. • Каждая ветка для своих задач. • Специальные – не технически, а логически. • Используйте соглашения внутри команды.
  • 16. FEATURE ВЕТКИ • Наследуются только от develop; • Сливаются обратно только в develop; • Имя ветки может быть любым, кроме master, develop, release-*, hotfix-*; • Рекомендую именовать: • feature-name; • feature-task-number. • Не сливать в origin; • Только в локальных репозиториях.
  • 17. FEATURE LIFE CYCLE Создание ветки: $ git checkout -b myfeature develop Switched to a new branch "myfeature» Конец жизненного цикла ветки: $ git checkout develop Switched to branch 'develop' $ git merge --no-ff myfeature Updating ea1b82a..05e9557 (Summary of changes) $ git branch -d myfeature Deleted branch myfeature (was 05e9557). $ git push origin develop
  • 19. RELEASE ВЕТКИ • Ветвление этих веток может быть произведено только от develop; • Эти ветки должны сливаться обратно в develop и в master; • Имя ветки должно быть формата release-*; • Предназначены для подготовки релиза продукта; • Пока не выпущен релиз, весь оставшийся код ждет окончания выпуска релиза; • Релиз получает номер версии именно при создании этих веток.
  • 20. RELEASE - СОЗДАНИЕ Создание release ветки $ git checkout -b release-1.2 develop Switched to a new branch "release-1.2" $ ./bump-version.sh 1.2 Files modified successfully, version bumped to 1.2. $ git commit -a -m "Bumped version number to 1.2" [release-1.2 74d9424] Bumped version number to 1.2 1 files changed, 1 insertions(+), 1 deletions(-)
  • 21. RELEASE ЧТО ДЕЛАТЬ? • Обновление версии во всем исходном коде, где она есть; • Тщательно проверяется исходный код, проводится тестирование, исправляются недочеты; • Никакого нового функционала не добавлять (!).
  • 22. RELEASE - ЗАКРЫТИЕ Закрытие ветки идет в три этапа: • Выпуск релиза; • Изменения из ветки возвращаются в develop ветку; • Удаление ветки.
  • 23. RELEASE – ЗАКРЫТИЕ ШАГ ПЕРВЫЙ Производится выпуск релиза $ git checkout master Switched to branch 'master' $ git merge --no-ff release-1.2 Merge made by recursive. (Summary of changes) $ git tag -a 1.2
  • 24. RELEASE – ЗАКРЫТИЕ ШАГ ВТОРОЙ Возвращение изменения обратно в develop $ git checkout develop Switched to branch 'develop' $ git merge --no-ff release-1.2 Merge made by recursive. (Summary of changes)
  • 25. RELEASE – ЗАКРЫТИЕ ШАГ ТРЕТИЙ Удаление ветки $ git branch -d release-1.2 Deleted branch release-1.2 (was ff452fe).
  • 26. HOTFIX ВЕТКИ • Ветвление этих веток может быть произведено только от master; • Эти ветки должны объединяться обратно c master и develop; • Имя ветки должно быть формата hotfix-*; • Это те же release-ветки, только для выпуска незапланированных релизов (bugfix релизов);
  • 27. HOTFIX - СОЗДАНИЕ Ветка создается ветвлением от ветки master $ git checkout -b hotfix-1.2.1 master Switched to a new branch "hotfix-1.2.1" $ ./bump-version.sh 1.2.1 Files modified successfully, version bumped to 1.2.1. $ git commit -a -m "Bumped version number to 1.2.1" [hotfix-1.2.1 41e61bb] Bumped version number to 1.2.1 1 files changed, 1 insertions(+), 1 deletions(-)
  • 28. HOTFIX – ЗАКРЫТИЕ ШАГ ПЕРВЫЙ Производятся нужные изменения для исправления ошибки $ git commit -m "Fixed severe production problem" [hotfix-1.2.1 abbe5d6] Fixed severe production problem 5 files changed, 32 insertions(+), 17 deletions(-)
  • 29. HOTFIX – ЗАКРЫТИЕ ШАГ ВТОРОЙ Слив изменений в master и обновление тега $ git checkout master Switched to branch 'master' $ git merge --no-ff hotfix-1.2.1 Merge made by recursive. (Summary of changes) $ git tag -a 1.2.1
  • 30. HOTFIX – ЗАКРЫТИЕ ШАГ ТРЕТИЙ Занесение изменений в develop ветку $ git checkout develop Switched to branch 'develop' $ git merge --no-ff hotfix-1.2.1 Merge made by recursive. (Summary of changes)
  • 31. HOTFIX – ЗАКРЫТИЕ ШАГ ЧЕТВЕРТЫЙ Удаление ветки $ git branch -d hotfix-1.2.1 Deleted branch hotfix-1.2.1 (was abbe5d6).
  • 32. АВТОМАТИЗАЦИЯ • Методика уже автоматизирована. • Существует готовый набор скриптов: https://github.com/nvie/gitflow
  • 33. ИСПОЛЬЗОВАНИЕ • git flow init [-d] (-d применяет дефолтные настройки); • git flow feature • git flow feature start <name> [<base>] • git flow feature finish <name> • git flow feature publish <name> • git flow feature pull <remote> <name> • git flow release • git flow release start <release> [<base>] • git flow release finish <release> • git flow hotfix • git flow hotfix start <release> [<base>] • git flow hotfix finish <release> • git flow support • git flow support start <release> <base>
  • 34. GIT FLOW И DEPLOY • На production сервер выкатываются версии только из origin/master; • На staging сервер выкатываются версии только из origin/develop; • Для автоматизации выкатки можно использовать git hooks.