SlideShare a Scribd company logo
1 of 31
git
Александр Герасёв, ЛВК
dev-sem, 16.11.11
gq@cs.msu.su
http://lvk.cs.msu.su
История изменений
● Нужна ли история изменений?
● Кому и зачем она нужна?
● Откуда выросли современные
распределенные системы управления
исходным кодом.
● git, типовые сценарии, git magic.
Зачем и как управлять
версиями
● Архивирование
● RCS
● CVS
● SVN
● Distributed RCS
● DRCS, DCVS, DSCM(S), DCMS etc.
Линейная история
● Checkout
● Commit
Откуда берутся ветви?
● Upstream based modifications
● Devel (aka trunk, aka master), next, release
● Feature branch
Ты не один
● Централизованный сервер
● Разработчик на привязи
● Конфликты, блокировки
Нумерация версий
● Линейная история
● Ветки
● Версия файла vs. общая версия
Объединение веток
● Всё плохо
● При повторных слияниях всё еще хуже
● Нужна метаинформация
● 3-way merge
Commit often
● Это плохо?
– Нет.
● Это хорошо?
– Нет!
● Создать ветку.
– Но она никому не нужна.
Желание свободы
● Работа без сервера
● Независимая история, независимые
деревья
● Взаимодействие разработчиков
Откуда взялся git
● Ядро разрабатывалось без SCMS o_0
● Тарболы, патчи, списки рассылки
● Проприетарный bitkeeper
● Oops!
Требования к SCM
● Распределенность
● Скорость работы (ПО, пользователя)
● Компактное хранение
● Целостность
● Гибкость и “удобство работы”
Git – это ужасно
● Learning curve
● Согласованность интерфейса
● Количество операций
– 75 “high level"
– 57 “low level"
● 20 способов сделать одно и то же
Как устроен git
● git = object database + refs
● Objects
– Commit Object
– Tree Object
– Blob Object
– Tag Object
● Trust
● Refs
– Branch
– Tag
Index
● Временное хранилище для
взаимодействия с репозиторием
● Хранилище метаинформации для
ускорения работы
Workflow
● Отсутствие одного (двух, трёх)
"правильного" workflow
● 20 способов...
● gitworkflows(7)
Работа в одиночку
● git init
● git add
● git commit
● git checkout
● git log
● git show
● git diff
● git reset
● git rm
● git cp/mv
Релизы и багфиксы
● git branch
● git tag
● git cherry-pick (git cherry)
● git stash
Взаимодействие с удаленным
репозиторием
● git clone
● git pull
● Локальные и удаленные ветки
● git fetch
● git push
● Несколько удаленных репозиториев
Разработка модификаций,
основанных на upstream
версии
● merge
● rebase
● Конфликты
Разрешение конфликтов в git
● Умный git
● Стратегии объединения изменений
● mergetool
● Git не понимает смысл кода, он просто
управляет изменениями
Помогите, я всё
сломал/потерял!
● Хранение объектов
● reflog
Совместная разработка
● Политика ветвления
● Правила составления и оформления
коммитов
Переписывание истории
● git commit --amend
● git add --patch
● git cherry-pick
● git rebase -i
Кто во всём виноват?
● git revert
● git blame
● git bisect
Графические инструменты
● gitk
Низкоуровневые
инструменты
● Для использования в скриптах.
● git rev-parse
● git cat-file
Хуки
● Зачем это надо?
● Что можно сделать?
Взаимодействие с другими VCS
- Oh! Damn it! Upstream morons are using CVS!
● Import репозитория
– CVS
– SVN
– Hg(?)
● Подготовка патча или коммит
Как мы перешли на git
● В прошлой версии презентации этот
слайд назывался «Как нам перейти на git
при разработке стенда?»
Всем спасибо
● http://git-scm.com

More Related Content

What's hot

Илья Ковалевский "Что такое Qt и что с ним можно сделать"
Илья Ковалевский "Что такое Qt и что с ним можно сделать"Илья Ковалевский "Что такое Qt и что с ним можно сделать"
Илья Ковалевский "Что такое Qt и что с ним можно сделать"Dmitry Savchenko
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5Provectus
 
Введение в gRPC / Introduction to gRPC
Введение в gRPC / Introduction to gRPCВведение в gRPC / Introduction to gRPC
Введение в gRPC / Introduction to gRPCMad Devs
 
СЕРГІЙ БРИТ «Огляд фреймворків та інструментів для автоматизації тестування R...
СЕРГІЙ БРИТ «Огляд фреймворків та інструментів для автоматизації тестування R...СЕРГІЙ БРИТ «Огляд фреймворків та інструментів для автоматизації тестування R...
СЕРГІЙ БРИТ «Огляд фреймворків та інструментів для автоматизації тестування R...GoQA
 
Сергей Сергеев "Менеджмент кода, или Почему SCM"
Сергей Сергеев "Менеджмент кода, или Почему SCM"Сергей Сергеев "Менеджмент кода, или Почему SCM"
Сергей Сергеев "Менеджмент кода, или Почему SCM"Yandex
 
GDG meetup #15: Как построить релиз-инжиниринг на Jenkins
GDG meetup #15: Как построить релиз-инжиниринг на JenkinsGDG meetup #15: Как построить релиз-инжиниринг на Jenkins
GDG meetup #15: Как построить релиз-инжиниринг на JenkinsMikhail Chinkov
 
Все о бекенде мобильных приложений Badoo
Все о бекенде мобильных приложений BadooВсе о бекенде мобильных приложений Badoo
Все о бекенде мобильных приложений BadooCodeFest
 
ZFS - файловая система будущего
ZFS - файловая система будущегоZFS - файловая система будущего
ZFS - файловая система будущегоAlex Chistyakov
 
Kubasov 1 7_deploy
Kubasov 1 7_deployKubasov 1 7_deploy
Kubasov 1 7_deploykuchinskaya
 
2015.02.06 PostgreSQL в Яндексе: история успеха №2
2015.02.06 PostgreSQL в Яндексе: история успеха №22015.02.06 PostgreSQL в Яндексе: история успеха №2
2015.02.06 PostgreSQL в Яндексе: история успеха №2dev1ant
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаendeveit
 
Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016Nikita Baksalyar
 
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.HappyDev-lite
 
crossplatform report generation via Qt and openoffice
crossplatform report generation via Qt and openofficecrossplatform report generation via Qt and openoffice
crossplatform report generation via Qt and openofficeТранслируем.бел
 
специализированные http-демона (Сергей Боченков, Александр Панков)
специализированные http-демона (Сергей Боченков, Александр Панков)специализированные http-демона (Сергей Боченков, Александр Панков)
специализированные http-демона (Сергей Боченков, Александр Панков)Ontico
 
Массовые операции над письмами в Яндекс.Почте — Денис Кутуков
Массовые операции над письмами в Яндекс.Почте — Денис КутуковМассовые операции над письмами в Яндекс.Почте — Денис Кутуков
Массовые операции над письмами в Яндекс.Почте — Денис КутуковYandex
 
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...Nikolay Samokhvalov
 

What's hot (20)

Илья Ковалевский "Что такое Qt и что с ним можно сделать"
Илья Ковалевский "Что такое Qt и что с ним можно сделать"Илья Ковалевский "Что такое Qt и что с ним можно сделать"
Илья Ковалевский "Что такое Qt и что с ним можно сделать"
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 
Введение в gRPC / Introduction to gRPC
Введение в gRPC / Introduction to gRPCВведение в gRPC / Introduction to gRPC
Введение в gRPC / Introduction to gRPC
 
СЕРГІЙ БРИТ «Огляд фреймворків та інструментів для автоматизації тестування R...
СЕРГІЙ БРИТ «Огляд фреймворків та інструментів для автоматизації тестування R...СЕРГІЙ БРИТ «Огляд фреймворків та інструментів для автоматизації тестування R...
СЕРГІЙ БРИТ «Огляд фреймворків та інструментів для автоматизації тестування R...
 
Сергей Сергеев "Менеджмент кода, или Почему SCM"
Сергей Сергеев "Менеджмент кода, или Почему SCM"Сергей Сергеев "Менеджмент кода, или Почему SCM"
Сергей Сергеев "Менеджмент кода, или Почему SCM"
 
Build your own multistack JS startup
Build your own multistack JS startupBuild your own multistack JS startup
Build your own multistack JS startup
 
GDG meetup #15: Как построить релиз-инжиниринг на Jenkins
GDG meetup #15: Как построить релиз-инжиниринг на JenkinsGDG meetup #15: Как построить релиз-инжиниринг на Jenkins
GDG meetup #15: Как построить релиз-инжиниринг на Jenkins
 
Все о бекенде мобильных приложений Badoo
Все о бекенде мобильных приложений BadooВсе о бекенде мобильных приложений Badoo
Все о бекенде мобильных приложений Badoo
 
Kothic JS - Web Browser Crash Test
Kothic JS - Web Browser Crash TestKothic JS - Web Browser Crash Test
Kothic JS - Web Browser Crash Test
 
ZFS - файловая система будущего
ZFS - файловая система будущегоZFS - файловая система будущего
ZFS - файловая система будущего
 
Kubasov 1 7_deploy
Kubasov 1 7_deployKubasov 1 7_deploy
Kubasov 1 7_deploy
 
2015.02.06 PostgreSQL в Яндексе: история успеха №2
2015.02.06 PostgreSQL в Яндексе: история успеха №22015.02.06 PostgreSQL в Яндексе: история успеха №2
2015.02.06 PostgreSQL в Яндексе: история успеха №2
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
 
Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016
 
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.
 
Php Daemon
Php DaemonPhp Daemon
Php Daemon
 
crossplatform report generation via Qt and openoffice
crossplatform report generation via Qt and openofficecrossplatform report generation via Qt and openoffice
crossplatform report generation via Qt and openoffice
 
специализированные http-демона (Сергей Боченков, Александр Панков)
специализированные http-демона (Сергей Боченков, Александр Панков)специализированные http-демона (Сергей Боченков, Александр Панков)
специализированные http-демона (Сергей Боченков, Александр Панков)
 
Массовые операции над письмами в Яндекс.Почте — Денис Кутуков
Массовые операции над письмами в Яндекс.Почте — Денис КутуковМассовые операции над письмами в Яндекс.Почте — Денис Кутуков
Массовые операции над письмами в Яндекс.Почте — Денис Кутуков
 
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
#PostgreSQLRussia 2015.09.15 - Максим Трегубов, CUSTIS - Миграция из Oracle в...
 

Viewers also liked

В поисках эффективного middleware
В поисках эффективного middlewareВ поисках эффективного middleware
В поисках эффективного middlewareAlexander Gerasiov
 
Инструменты разработки ПО в *nix
Инструменты разработки ПО в *nixИнструменты разработки ПО в *nix
Инструменты разработки ПО в *nixAlexander Gerasiov
 
Лицензирование ПО в современном мире
Лицензирование ПО в современном миреЛицензирование ПО в современном мире
Лицензирование ПО в современном миреAlexander Gerasiov
 
Кластеризации поисковых запросов в Ipython
Кластеризации поисковых запросов в IpythonКластеризации поисковых запросов в Ipython
Кластеризации поисковых запросов в IpythonМихаил Жуковец
 
RnDM MSU CMC 7.5 Управление процессом разработки
RnDM MSU CMC 7.5 Управление процессом разработкиRnDM MSU CMC 7.5 Управление процессом разработки
RnDM MSU CMC 7.5 Управление процессом разработкиAlexander Gerasiov
 

Viewers also liked (12)

В поисках эффективного middleware
В поисках эффективного middlewareВ поисках эффективного middleware
В поисках эффективного middleware
 
Linux drivers
Linux driversLinux drivers
Linux drivers
 
Package maintaining in Debian
Package maintaining in DebianPackage maintaining in Debian
Package maintaining in Debian
 
Data storage systems
Data storage systemsData storage systems
Data storage systems
 
Инструменты разработки ПО в *nix
Инструменты разработки ПО в *nixИнструменты разработки ПО в *nix
Инструменты разработки ПО в *nix
 
Qt (mvc)
Qt (mvc)Qt (mvc)
Qt (mvc)
 
Qt
QtQt
Qt
 
Brands.i look v5-n6
Brands.i look v5-n6Brands.i look v5-n6
Brands.i look v5-n6
 
Лицензирование ПО в современном мире
Лицензирование ПО в современном миреЛицензирование ПО в современном мире
Лицензирование ПО в современном мире
 
Кластеризации поисковых запросов в Ipython
Кластеризации поисковых запросов в IpythonКластеризации поисковых запросов в Ipython
Кластеризации поисковых запросов в Ipython
 
RnDM MSU CMC 7.5 Управление процессом разработки
RnDM MSU CMC 7.5 Управление процессом разработкиRnDM MSU CMC 7.5 Управление процессом разработки
RnDM MSU CMC 7.5 Управление процессом разработки
 
iptables
iptablesiptables
iptables
 

Similar to Git

Распределенные системы контоля версия на примере git
Распределенные системы контоля версия на примере gitРаспределенные системы контоля версия на примере git
Распределенные системы контоля версия на примере gitIvan Evtukhovich
 
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...it-people
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаITCrowd Almaty
 
обзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторингаобзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторингаКонстантин Никифоров
 
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...Ontico
 
Git для новичков
Git для новичковGit для новичков
Git для новичковSoftline
 
что такое Git и как с ним бороться
что такое Git и как с ним боротьсячто такое Git и как с ним бороться
что такое Git и как с ним боротьсяВладимир Кожаев
 
SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013Alex Chistyakov
 
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...e-Legion
 
GIT Slides (25.03.2015)
GIT Slides (25.03.2015)GIT Slides (25.03.2015)
GIT Slides (25.03.2015)Ilya V
 
High Load 2009 Imdg Presentation
High Load 2009   Imdg PresentationHigh Load 2009   Imdg Presentation
High Load 2009 Imdg PresentationHighLoad2009
 
Михаил Корепанов "Инкрементальные обновления на клиенте"
Михаил Корепанов "Инкрементальные обновления на клиенте"Михаил Корепанов "Инкрементальные обновления на клиенте"
Михаил Корепанов "Инкрементальные обновления на клиенте"Yandex
 
Доклад Владислава Чернова на SQA Days 2013. "Continuous delivery в крупном ин...
Доклад Владислава Чернова на SQA Days 2013. "Continuous delivery в крупном ин...Доклад Владислава Чернова на SQA Days 2013. "Continuous delivery в крупном ин...
Доклад Владислава Чернова на SQA Days 2013. "Continuous delivery в крупном ин...Badoo Development
 
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...Yandex
 
Git для начинающих
Git для начинающихGit для начинающих
Git для начинающихVadim Drobinin
 

Similar to Git (20)

Распределенные системы контоля версия на примере git
Распределенные системы контоля версия на примере gitРаспределенные системы контоля версия на примере git
Распределенные системы контоля версия на примере git
 
Git for you
Git for youGit for you
Git for you
 
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
 
обзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторингаобзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторинга
 
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
 
GitFlow_MOEX
GitFlow_MOEXGitFlow_MOEX
GitFlow_MOEX
 
Git для новичков
Git для новичковGit для новичков
Git для новичков
 
Git presentation
Git presentationGit presentation
Git presentation
 
Gitlab devconf
Gitlab devconfGitlab devconf
Gitlab devconf
 
что такое Git и как с ним бороться
что такое Git и как с ним боротьсячто такое Git и как с ним бороться
что такое Git и как с ним бороться
 
SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013
 
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
 
GIT Slides (25.03.2015)
GIT Slides (25.03.2015)GIT Slides (25.03.2015)
GIT Slides (25.03.2015)
 
iweb01
iweb01iweb01
iweb01
 
High Load 2009 Imdg Presentation
High Load 2009   Imdg PresentationHigh Load 2009   Imdg Presentation
High Load 2009 Imdg Presentation
 
Михаил Корепанов "Инкрементальные обновления на клиенте"
Михаил Корепанов "Инкрементальные обновления на клиенте"Михаил Корепанов "Инкрементальные обновления на клиенте"
Михаил Корепанов "Инкрементальные обновления на клиенте"
 
Доклад Владислава Чернова на SQA Days 2013. "Continuous delivery в крупном ин...
Доклад Владислава Чернова на SQA Days 2013. "Continuous delivery в крупном ин...Доклад Владислава Чернова на SQA Days 2013. "Continuous delivery в крупном ин...
Доклад Владислава Чернова на SQA Days 2013. "Continuous delivery в крупном ин...
 
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
 
Git для начинающих
Git для начинающихGit для начинающих
Git для начинающих
 

Git