SlideShare ist ein Scribd-Unternehmen logo
1 von 14
Downloaden Sie, um offline zu lesen
ПРО GIT
МАРТ 2016
НЕМНОГО
ТЕОРИИ
GIT
3
• Распределенная система управления версиями
• Локальные репозитории vs удаленные репозитории
• Настройки в текстовых файлах
• Ветки
• Набор утилит командной строки
• Ваша любимая графическая оболочка
• Ваш любимый веб-интерфейс (Gitlab, Stash, …)
ОБЪЕКТЫ GIT
4
• Blob — хранение содержимого файла
• Дерево — хранение списка файлов
• Коммит — хранение состояния файлов
• Тег — метка коммита
ИЗМЕНЕНИЯ, КОММИТЫ, УКАЗАТЕЛИ
5
• Любой снимок доступен по хешу коммита, в котором он был
сделан
• Ветка — это просто указатель на верхний коммит в некоторой
цепочке коммитов.
• HEAD — хранит указатель на текущую ветку
ТЕГИ
6
• Позволяют фиксировать важные моменты в истории
репозитория
• Задавать названия релизов, версии библиотек и т. д.
• Пример: аннотированный тег может содержать release notes
релиза, к которому он относится
ЛУЧШИЕ
ПРАКТИКИ
КОДРЕВЬЮ: ЗАЧЕМ?
8
• Оценить изменения в ветке-кандидате относительно главной
ветки
• Сообщить команде о предстоящих изменениях
• Найти потенциальные ошибки
• Оценить документацию
• Поправить codestyle
ОСМЫСЛЕННЫЕ COMMIT MESSAGES
9
• Отвечают на вопрос «что сделал?»
• Позволяют другим понять, зачем в код были внесены изменения
• Упрощают кодревью
• Помогают написать release notes
• Помогают интегрироваться с багтрекерами
• git commit -m ‘Summary’ -m ‘Description’
MERGE VS REBASE
10
• Задача: объединить изменения одной ветки с другой веткой.
Например, влить в локальную ветку изменения из удаленной
• Узкое место: если делать git pull и git push, то при
определенных условиях git будет создавать бессмысленные
merge-коммиты
• Даже когда вы делаете git pull orgin master, git создаст мерж-
коммит, если в удаленном master’е были чужие изменения
• Чем плохо? Загрязняет историю коммитов
• Что делать? Всегда git pull --rebase orgin master
MERGE VS REBASE: СЛИЯНИЕ ВЕТОК
11
• Аналогично: для того, чтобы слить разные ветки вместо git
merge feature делаем git rebase feature
• Находясь в фича-ветке, вливаем в нее master: git rebase master
• Находясь в master’е, вливаем фича-ветку: git rebase feature
• После того, как был произведен rebase всех необходимых
изменений, можно делать git push.
ИНТЕРАКТИВНЫЙ REBASE
12
• GIT — это не система создания бэкапов!
• Одно из правил хорошего тона — сквош коммитов, которые по одиночке
не несут никакого смысла, но вместе представляют собой некоторое
осмысленное действие
• Зачем? Проще разруливать конфликты между своей веткой и одним
коммитом из другой, чем между своей веткой и пятьюдесятью коммитами
• Что еще? Поменять коммиты местами. Удалить коммиты, как будто их и не
было
• Примечание 1. Будьте осторожны, производя rebase в удаленных
репозиториях
• Примечание 2. Будьте осторожны при использовании --force
git rebase -i
ХУКИ
13
• Хуки — это скрипты, которые срабатывают при возникновении
некоторых событий — commit, push, merge и т. д.
• Локальные (client-side) и удаленные (server-side)
• Как использовать:
• автопроверки (формат commit-message, codestyle и другие
соглашения)
• оповещение внешних систем (коммент в багтрекере, запуск
автотестов и т. д.)
.git/hooks
ЧТО ЧИТАТЬ
14
• Git How To: https://githowto.com/ru
• Pro Git: https://git-scm.com/book/ru/v2
• Правила хорошего тона при оформлении коммитов: https://
habrahabr.ru/company/Voximplant/blog/276695/
• Как использовать git rebase: https://habrahabr.ru/post/161009/

Weitere ähnliche Inhalte

Was ist angesagt?

Git - Вадим Валуев
Git - Вадим ВалуевGit - Вадим Валуев
Git - Вадим ВалуевDrupalCamp MSK
 
Ivan Kotlyar. PostgreSQL in web applications
Ivan Kotlyar. PostgreSQL in web applicationsIvan Kotlyar. PostgreSQL in web applications
Ivan Kotlyar. PostgreSQL in web applicationsDrupalSib
 
Как ВКонтакте использует Go
Как ВКонтакте использует GoКак ВКонтакте использует Go
Как ВКонтакте использует GoArtem Kovardin
 
Git для тестировщиков
Git для тестировщиковGit для тестировщиков
Git для тестировщиковSQALab
 
Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014Alex Chistyakov
 
Systemd. Структура и применение
Systemd. Структура и применениеSystemd. Структура и применение
Systemd. Структура и применениеudmlug
 

Was ist angesagt? (7)

Git - Вадим Валуев
Git - Вадим ВалуевGit - Вадим Валуев
Git - Вадим Валуев
 
Ivan Kotlyar. PostgreSQL in web applications
Ivan Kotlyar. PostgreSQL in web applicationsIvan Kotlyar. PostgreSQL in web applications
Ivan Kotlyar. PostgreSQL in web applications
 
Как ВКонтакте использует Go
Как ВКонтакте использует GoКак ВКонтакте использует Go
Как ВКонтакте использует Go
 
Git для тестировщиков
Git для тестировщиковGit для тестировщиков
Git для тестировщиков
 
Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014Chef, Puppet, Salt, Ansible on SECON 2014
Chef, Puppet, Salt, Ansible on SECON 2014
 
Git presentation
Git presentationGit presentation
Git presentation
 
Systemd. Структура и применение
Systemd. Структура и применениеSystemd. Структура и применение
Systemd. Структура и применение
 

Andere mochten auch

Введение в язык программирования Go
Введение в язык программирования GoВведение в язык программирования Go
Введение в язык программирования GoElena Grahovac
 
Пользовательские истории
Пользовательские историиПользовательские истории
Пользовательские историиElena Grahovac
 
Women Techmakers Novosibirsk, первый митап
Women Techmakers Novosibirsk, первый митапWomen Techmakers Novosibirsk, первый митап
Women Techmakers Novosibirsk, первый митапElena Grahovac
 
Пословицы дядюшки Пайка
Пословицы дядюшки ПайкаПословицы дядюшки Пайка
Пословицы дядюшки ПайкаElena Grahovac
 
Денис Тучин - Пользовательские истории в Agile-проектах
Денис Тучин - Пользовательские истории в Agile-проектахДенис Тучин - Пользовательские истории в Agile-проектах
Денис Тучин - Пользовательские истории в Agile-проектахDenis Tuchin
 
Микросервисные архитектуры и немного жизненного опыта
Микросервисные архитектуры и немного жизненного опытаМикросервисные архитектуры и немного жизненного опыта
Микросервисные архитектуры и немного жизненного опытаElena Grahovac
 

Andere mochten auch (6)

Введение в язык программирования Go
Введение в язык программирования GoВведение в язык программирования Go
Введение в язык программирования Go
 
Пользовательские истории
Пользовательские историиПользовательские истории
Пользовательские истории
 
Women Techmakers Novosibirsk, первый митап
Women Techmakers Novosibirsk, первый митапWomen Techmakers Novosibirsk, первый митап
Women Techmakers Novosibirsk, первый митап
 
Пословицы дядюшки Пайка
Пословицы дядюшки ПайкаПословицы дядюшки Пайка
Пословицы дядюшки Пайка
 
Денис Тучин - Пользовательские истории в Agile-проектах
Денис Тучин - Пользовательские истории в Agile-проектахДенис Тучин - Пользовательские истории в Agile-проектах
Денис Тучин - Пользовательские истории в Agile-проектах
 
Микросервисные архитектуры и немного жизненного опыта
Микросервисные архитектуры и немного жизненного опытаМикросервисные архитектуры и немного жизненного опыта
Микросервисные архитектуры и немного жизненного опыта
 

Ähnlich wie Про Git

что такое Git и как с ним бороться
что такое Git и как с ним боротьсячто такое Git и как с ним бороться
что такое Git и как с ним боротьсяВладимир Кожаев
 
Переход на Git из Subversion
Переход на Git из SubversionПереход на Git из Subversion
Переход на Git из SubversionMikhail Vasilyev
 
Основы работы с Git
Основы работы с GitОсновы работы с Git
Основы работы с GitDenis Latushkin
 
Git для начинающих
Git для начинающихGit для начинающих
Git для начинающихVadim Drobinin
 
GIT: что внутри, и как это работает?
GIT: что внутри, и как это работает?GIT: что внутри, и как это работает?
GIT: что внутри, и как это работает?Tados
 
Git - распределенная система контроля версий
Git - распределенная система контроля версийGit - распределенная система контроля версий
Git - распределенная система контроля версийOleg Poyaganov
 
Новый дом для репозитория или история переезда на Git lab
Новый дом для репозитория или история переезда на Git labНовый дом для репозитория или история переезда на Git lab
Новый дом для репозитория или история переезда на Git labitconnect2016
 
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Oleg Tsarev
 
Презентация Git-flow (на русском)
Презентация Git-flow (на русском)Презентация Git-flow (на русском)
Презентация Git-flow (на русском)Sergey Chudakov
 
базовые принципы работы с Git
базовые принципы работы с Gitбазовые принципы работы с Git
базовые принципы работы с GitDressTester
 
Controlul versiunilor
Controlul versiunilor Controlul versiunilor
Controlul versiunilor Dmitrii Stoian
 
Git для новичков
Git для новичковGit для новичков
Git для новичковSoftline
 
Распределенные системы контоля версия на примере git
Распределенные системы контоля версия на примере gitРаспределенные системы контоля версия на примере git
Распределенные системы контоля версия на примере gitIvan Evtukhovich
 

Ähnlich wie Про Git (20)

что такое Git и как с ним бороться
что такое Git и как с ним боротьсячто такое Git и как с ним бороться
что такое Git и как с ним бороться
 
Переход на Git из Subversion
Переход на Git из SubversionПереход на Git из Subversion
Переход на Git из Subversion
 
Git
GitGit
Git
 
Основы работы с Git
Основы работы с GitОсновы работы с Git
Основы работы с Git
 
Git для начинающих
Git для начинающихGit для начинающих
Git для начинающих
 
Giflow
GiflowGiflow
Giflow
 
GIT: что внутри, и как это работает?
GIT: что внутри, и как это работает?GIT: что внутри, и как это работает?
GIT: что внутри, и как это работает?
 
GitFlow_MOEX
GitFlow_MOEXGitFlow_MOEX
GitFlow_MOEX
 
Git - распределенная система контроля версий
Git - распределенная система контроля версийGit - распределенная система контроля версий
Git - распределенная система контроля версий
 
Gitlab devconf
Gitlab devconfGitlab devconf
Gitlab devconf
 
Новый дом для репозитория или история переезда на Git lab
Новый дом для репозитория или история переезда на Git labНовый дом для репозитория или история переезда на Git lab
Новый дом для репозитория или история переезда на Git lab
 
Git intro
Git introGit intro
Git intro
 
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
Асинхронная репликация без цензуры: архитектурные проблемы MySQL, или почему ...
 
Презентация Git-flow (на русском)
Презентация Git-flow (на русском)Презентация Git-flow (на русском)
Презентация Git-flow (на русском)
 
базовые принципы работы с Git
базовые принципы работы с Gitбазовые принципы работы с Git
базовые принципы работы с Git
 
Controlul versiunilor
Controlul versiunilor Controlul versiunilor
Controlul versiunilor
 
Git for you
Git for youGit for you
Git for you
 
Git для новичков
Git для новичковGit для новичков
Git для новичков
 
Git
GitGit
Git
 
Распределенные системы контоля версия на примере git
Распределенные системы контоля версия на примере gitРаспределенные системы контоля версия на примере git
Распределенные системы контоля версия на примере git
 

Про Git

  • 3. GIT 3 • Распределенная система управления версиями • Локальные репозитории vs удаленные репозитории • Настройки в текстовых файлах • Ветки • Набор утилит командной строки • Ваша любимая графическая оболочка • Ваш любимый веб-интерфейс (Gitlab, Stash, …)
  • 4. ОБЪЕКТЫ GIT 4 • Blob — хранение содержимого файла • Дерево — хранение списка файлов • Коммит — хранение состояния файлов • Тег — метка коммита
  • 5. ИЗМЕНЕНИЯ, КОММИТЫ, УКАЗАТЕЛИ 5 • Любой снимок доступен по хешу коммита, в котором он был сделан • Ветка — это просто указатель на верхний коммит в некоторой цепочке коммитов. • HEAD — хранит указатель на текущую ветку
  • 6. ТЕГИ 6 • Позволяют фиксировать важные моменты в истории репозитория • Задавать названия релизов, версии библиотек и т. д. • Пример: аннотированный тег может содержать release notes релиза, к которому он относится
  • 8. КОДРЕВЬЮ: ЗАЧЕМ? 8 • Оценить изменения в ветке-кандидате относительно главной ветки • Сообщить команде о предстоящих изменениях • Найти потенциальные ошибки • Оценить документацию • Поправить codestyle
  • 9. ОСМЫСЛЕННЫЕ COMMIT MESSAGES 9 • Отвечают на вопрос «что сделал?» • Позволяют другим понять, зачем в код были внесены изменения • Упрощают кодревью • Помогают написать release notes • Помогают интегрироваться с багтрекерами • git commit -m ‘Summary’ -m ‘Description’
  • 10. MERGE VS REBASE 10 • Задача: объединить изменения одной ветки с другой веткой. Например, влить в локальную ветку изменения из удаленной • Узкое место: если делать git pull и git push, то при определенных условиях git будет создавать бессмысленные merge-коммиты • Даже когда вы делаете git pull orgin master, git создаст мерж- коммит, если в удаленном master’е были чужие изменения • Чем плохо? Загрязняет историю коммитов • Что делать? Всегда git pull --rebase orgin master
  • 11. MERGE VS REBASE: СЛИЯНИЕ ВЕТОК 11 • Аналогично: для того, чтобы слить разные ветки вместо git merge feature делаем git rebase feature • Находясь в фича-ветке, вливаем в нее master: git rebase master • Находясь в master’е, вливаем фича-ветку: git rebase feature • После того, как был произведен rebase всех необходимых изменений, можно делать git push.
  • 12. ИНТЕРАКТИВНЫЙ REBASE 12 • GIT — это не система создания бэкапов! • Одно из правил хорошего тона — сквош коммитов, которые по одиночке не несут никакого смысла, но вместе представляют собой некоторое осмысленное действие • Зачем? Проще разруливать конфликты между своей веткой и одним коммитом из другой, чем между своей веткой и пятьюдесятью коммитами • Что еще? Поменять коммиты местами. Удалить коммиты, как будто их и не было • Примечание 1. Будьте осторожны, производя rebase в удаленных репозиториях • Примечание 2. Будьте осторожны при использовании --force git rebase -i
  • 13. ХУКИ 13 • Хуки — это скрипты, которые срабатывают при возникновении некоторых событий — commit, push, merge и т. д. • Локальные (client-side) и удаленные (server-side) • Как использовать: • автопроверки (формат commit-message, codestyle и другие соглашения) • оповещение внешних систем (коммент в багтрекере, запуск автотестов и т. д.) .git/hooks
  • 14. ЧТО ЧИТАТЬ 14 • Git How To: https://githowto.com/ru • Pro Git: https://git-scm.com/book/ru/v2 • Правила хорошего тона при оформлении коммитов: https:// habrahabr.ru/company/Voximplant/blog/276695/ • Как использовать git rebase: https://habrahabr.ru/post/161009/