SlideShare a Scribd company logo
1 of 31
Download to read offline
Технологии разработки программного обеспечения
(практика)
Мартынов Семён, Хозяинов Иван
Санкт-Петербургского политехнического университета Петра Великого
Института компьютерных наук и технологий
Кафедра компьютерных систем и программных технологий
21 октября 2017 г.
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 1 / 31
Содержание
1 Итоги прошлого семинара
Итоги теста
Docker compose
Новый тест
2 Git
Введение
Основные команды
Git best practices
Решение конфликтов
3 Прочее
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 2 / 31
Итоги теста
Всего сдано работ: 23
Уровень владения Linux: A15 = 3.4, Var = 1.68
Уровень владения Java: A21 = 5.1, Var = 1.39
Знакомые языки: C, C++, Java, Pascal, Python, C#, Lua, Bash,
Kotlin, SQL, ASM, JS, PHP, HTML (???), CSS, Fortran, Matlab
Hello World:
C: 7
Java: 7
C++: 4
PHP: 2
Python: 1
Работающих решений: 68.18%
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 3 / 31
Итоги теста
Пожелания:
Тесты
Проектирование проектов
High load
cmake
git
gradle, maven
Junit
Jenkins
Прим. и разраб. БД
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 4 / 31
Разбор ДЗ
Вопросы?
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 5 / 31
Docker compose
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 6 / 31
Docker compose: example
Example (docker-compose.yml)
version: ’3’
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 7 / 31
Docker compose: WP
Example (docker-compose.yml)
wordpress:
image: wordpress
links:
- mariadb:mysql
environment:
- WORDPRESS_DB_PASSWORD=<password>
ports:
- "<server public IP>:80:80"
volumes:
- ./code:/code
- ./html:/var/www/html
mariadb:
image: mariadb
environment:
- MYSQL_ROOT_PASSWORD=<password>
- MYSQL_DATABASE=wordpress
volumes:
- ./database:/var/lib/mysql
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 8 / 31
Тест
ФИО, Группа?
Сделал(а) ли я ДЗ?
Как я оцениваю свой уровень владения git?
В чём отличие Docker от полноценной виртуализации (VirtualBOX)
и контейнерной (LXC)?
Программа принимает на вход конечную строку чисел. На любимом
ЯП, найдите где начинается самая длинная подпоследовательность.
Вход: 1567779844645556664444416541467
Выход: 19
У меня приложение на Java + MongoDB. Мои шаги по деплою?
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 9 / 31
Git
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 10 / 31
Системы управления версиями
Системы управления версиями:
Папки (архивы)
CVS (Concurrent Versions System) – 1990, GPL
Perforce Helix (Perforce, P4) – 1995, Proprietary
Subversion (SVN) – 2000, Apache License 2.0
Team Foundation Server (TFS) – 2005(?), Microsoft Trialware
Git (гит, не джит!!!) – 7 апреля 2005, GNU GPL 2
Mercurial (Hg) – 19 апреля 2005, GNU GPL 2
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 11 / 31
Компании, которые использую git
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 12 / 31
Первичная VCS в Вашей компании?
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 13 / 31
Что значит "Распределённый"?
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 14 / 31
Как работает git?
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 15 / 31
Основные возможности, плюсы
(почти) Все локально, можно работать без интернета
Контроль, можно удалить коммит, разбить на несколько,
поменять местами
Мерджить ветки одно удовольствие
Коммит изменений, а не файлов
Наглядные и мощные диф и лог
Stash для многостаночников
Bisect и Blame чтобы найти крайнего
Субмодули для сложных проектов
Ориентация на работу в команде
GUI для котиков и консоль для красноглазиков
Платформы GitHub, BitBucket
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 16 / 31
Основные возможности, минусы
Отсутствие сквозной нумерации коммитов
Использование такииииих длиииииинных хешей SHA1 для
идентификации ревизий
SHA1 (Линус сказал что у него есть план)
Система работает только с файлами и их содержимым, и не
отслеживает пустые каталоги
Накладные расходы при работе с несвязными данными
(Используйте p4?!)
3 шага чтобы показать свой код...
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 17 / 31
Три шага вместо одного (в SVN)
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 18 / 31
Основные команды
Создание репозитория
$ git init
Клонирование из определённого источника
$ git clone [url]
Добавление/Удаление файлов в индекс
$ git add file1 file2 ...
$ git add dir
$ git add --all
$ git rm file1 file2 ...
Коммит в локальный репозиторий
$ git commit file1 file2 ... [-m msg]
$ git commit -a [-m msg]
$ git commit --amend file1 file2 ... [-m msg]
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 19 / 31
Основные команды: статус
Отправка своих изменений на сервер
$ git push [remote]
$ git push remote branch
$ git pull remote
Статус и изменения
$ git status
$ git diff
Просмотр истории
$ git log
$ git log --author=author
$ git log --after="MMM DD YYYY"
$ git blame file rev
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 20 / 31
Работа с ветками
Просмотр веток
$ git branch
$ git branch -r
Переключение между ветками и коммитами
$ git checkout branch
$ git checkout rev
Создание/удаление веток
$ git checkout -b branch
$ git branch -d hotfix
Переключение веток без потери изменений
$ git stash
$ git checkout branch
$ git git stash pop
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 21 / 31
Git best practices
Первичная настройка (опционально: gravatar)
$ git config --global user.name "YOUR NAME"
$ git config --global user.email "YOUR_EMAIL@EXAMPLE.COM"
Всегда смотреть индекс перед коммитом
$ git status
Делать связь между номером задачи и коммитом
$ git commit -am "issue-123: blah-blah-blah..."
Делать частые коммиты при работе, но пушить одним изменением
$ git rebase -i HEAD~3
Удалить (откатить) последний локальный коммит
$ git reset HEAD~
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 22 / 31
Git best practices
Перемещение файлов и директорий
$ git mv path1 path2
Не комитить (т.е. стараться избегать) бинарные ресурсы
$ echo "Git is not intended for it."
Комбинировать коммиты
$ git commit --amend --no-edit
Не делать rebase уже отданных изменений
$ git rebase --interactive
... не использовать –force на отданных ветках!
$ git push --force
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 23 / 31
Модели работы с git
Git flow (Vincent Driessen)
GitHub flow (Scott Chacon)
GitLab Flow (Sytse
Sijbrandij)
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 24 / 31
Основные ветки
Центральный репозиторий
всегда содержит две ветки с
неограниченным сроком жизни:
master – в любой момент
времени содержит
production-ready код,
каждый коммит в эту ветку
считается новым релизом
продукта
develop – содержит
последний срез разработки,
который готовится к релизу
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 25 / 31
Ветки поддержки
Feature branches
Используется для разработки новых функциональных возможностей и
исправления ошибок. Когда начинается реализация функции, может
быть неизвестно, в какой релиз она будет включена, но обычно
существует 2-3 дня. Порождается и вливается в ветку develop.
Release branches
Ветка предназначена для подготовки кода к релизу. Позволяет вставить
последние минорные изменения и добавить мета-данные (номер версии,
дата сборки, и т.д.). Срок жизни 1-2 часа, порождается от develop,
вливается в develop и master.
Hotfix branches
Эти ветки необходимы, когда в уже выпущено продукте обнаруживается
критический баг, который необходимо срочно исправить. Срок жизни –
чем меньше, тем лучше. Порождаются от master, должны вливаться в
develop и master.
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 26 / 31
Используйте Pull requests
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 27 / 31
Решение конфликтов
В какой ситуации могут возникнуть конфликты?
Получили конфликт
$ git checkout featuredo-something-god
Switched to branch ’featuredo-something-god’
$ git merge develop
Auto-merging lib/hello.html
CONFLICT (content): Merge conflict in lib/hello.html
Automatic merge failed; fix conflicts and then commit the resul
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 28 / 31
Решение конфликтов
Как выглядит конфликтный файл?
Файл: lib/hello.html
<!-- Author: Semen Martynov (semen.martynov@gmail.com) -->
<html>
<head>
<<<<<<< HEAD
<link type="text/css" rel="stylesheet" media="all" href="st
=======
<!-- no style -->
>>>>>>> develop
</head>
<body>
<h1>Hello,World! Life is great!</h1>
</body>
</html>
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 29 / 31
Решение конфликтов
Возможные решения:
Отредактировать файл
git checkout –ours lib/hello.html
git checkout –theirs lib/hello.html
сохранить:
Файл: lib/hello.html
$ git add lib/hello.html
$ git commit -m "Merged master fixed conflict."
Recorded resolution for ’lib/hello.html’.
[style 645c4e6] Merged master fixed conflict.
И это победа!
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 30 / 31
ДЗ:
Написать сервис валидации JSON файлов.
На вход поступает некий файл, на выход либо форматированный JSON
либо сообщение об ошибке.
Работу вести в публичном git репозитории.
Обеспечить запуск из Docker.
Вопросы?
Замечания?
Дополнения?
Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 31 / 31

More Related Content

What's hot

Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
 Practical Python Packaging / Стас Рудаков / Web Developer Wargaming Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
Practical Python Packaging / Стас Рудаков / Web Developer WargamingPython Meetup
 
Internationalization and localization of the python applications with gettext...
Internationalization and localization of the python applications with gettext...Internationalization and localization of the python applications with gettext...
Internationalization and localization of the python applications with gettext...Volodymyr Hotsyk
 
о некоторых вопросах бинарной совместимости в C++
о некоторых вопросах бинарной совместимости в C++о некоторых вопросах бинарной совместимости в C++
о некоторых вопросах бинарной совместимости в C++corehard_by
 
Как ВКонтакте использует Go
Как ВКонтакте использует GoКак ВКонтакте использует Go
Как ВКонтакте использует GoArtem Kovardin
 
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studio
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studioчто пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studio
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studiocorehard_by
 
Организация работы с UE4 в команде до 20 человек
Организация работы с UE4 в команде до 20 человек Организация работы с UE4 в команде до 20 человек
Организация работы с UE4 в команде до 20 человек Sperasoft
 
Введение в динамический анализ приложений на примере Intel Pin
Введение в динамический анализ приложений на примере Intel PinВведение в динамический анализ приложений на примере Intel Pin
Введение в динамический анализ приложений на примере Intel PinSemen Martynov
 
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на QtДенис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на QtSergey Platonov
 
Мой Python всегда со мной!
Мой Python всегда со мной!Мой Python всегда со мной!
Мой Python всегда со мной!PyNSK
 
Переход на Git из Subversion
Переход на Git из SubversionПереход на Git из Subversion
Переход на Git из SubversionMikhail Vasilyev
 
Ігор Карпиленко — PHPStorm for drupal developer
Ігор Карпиленко — PHPStorm for drupal developerІгор Карпиленко — PHPStorm for drupal developer
Ігор Карпиленко — PHPStorm for drupal developerLEDC 2016
 
C++ Core Guidelines
C++ Core Guidelines C++ Core Guidelines
C++ Core Guidelines Sergey Zubkov
 
язык программирования Go
язык программирования Goязык программирования Go
язык программирования GoMac'Kensi Lord
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.Igor Shkulipa
 
Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...
Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...
Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...ScrumTrek
 

What's hot (19)

Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
 Practical Python Packaging / Стас Рудаков / Web Developer Wargaming Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
Practical Python Packaging / Стас Рудаков / Web Developer Wargaming
 
Golang
GolangGolang
Golang
 
Internationalization and localization of the python applications with gettext...
Internationalization and localization of the python applications with gettext...Internationalization and localization of the python applications with gettext...
Internationalization and localization of the python applications with gettext...
 
о некоторых вопросах бинарной совместимости в C++
о некоторых вопросах бинарной совместимости в C++о некоторых вопросах бинарной совместимости в C++
о некоторых вопросах бинарной совместимости в C++
 
Как ВКонтакте использует Go
Как ВКонтакте использует GoКак ВКонтакте использует Go
Как ВКонтакте использует Go
 
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studio
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studioчто пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studio
что пришлось тестировать и о чем узнать при подготовке Linux версии pvs-studio
 
Отладка в Python: 2016 edition
Отладка в Python: 2016 editionОтладка в Python: 2016 edition
Отладка в Python: 2016 edition
 
Организация работы с UE4 в команде до 20 человек
Организация работы с UE4 в команде до 20 человек Организация работы с UE4 в команде до 20 человек
Организация работы с UE4 в команде до 20 человек
 
Введение в динамический анализ приложений на примере Intel Pin
Введение в динамический анализ приложений на примере Intel PinВведение в динамический анализ приложений на примере Intel Pin
Введение в динамический анализ приложений на примере Intel Pin
 
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на QtДенис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
Денис Кандров, Пушкова Евгения, QSpec: тестирование графических приложений на Qt
 
Invisible
InvisibleInvisible
Invisible
 
Мой Python всегда со мной!
Мой Python всегда со мной!Мой Python всегда со мной!
Мой Python всегда со мной!
 
Переход на Git из Subversion
Переход на Git из SubversionПереход на Git из Subversion
Переход на Git из Subversion
 
Ігор Карпиленко — PHPStorm for drupal developer
Ігор Карпиленко — PHPStorm for drupal developerІгор Карпиленко — PHPStorm for drupal developer
Ігор Карпиленко — PHPStorm for drupal developer
 
C++ Core Guidelines
C++ Core Guidelines C++ Core Guidelines
C++ Core Guidelines
 
язык программирования Go
язык программирования Goязык программирования Go
язык программирования Go
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.
 
лекция 3
лекция 3лекция 3
лекция 3
 
Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...
Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...
Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...
 

Similar to Software engineering seminars: git

Software engineering seminars: jira
 Software engineering seminars: jira Software engineering seminars: jira
Software engineering seminars: jiraSemen Martynov
 
Software engineering seminars: jenkins
Software engineering seminars: jenkinsSoftware engineering seminars: jenkins
Software engineering seminars: jenkinsSemen Martynov
 
Software engineering seminars: gradle
 Software engineering seminars: gradle Software engineering seminars: gradle
Software engineering seminars: gradleSemen Martynov
 
Фронтенд для миллионов (Орёл)
Фронтенд для миллионов (Орёл)Фронтенд для миллионов (Орёл)
Фронтенд для миллионов (Орёл)Anastasia Goryacheva
 
Системы управления версиями (VCS). Знакомство с Git.
Системы управления версиями (VCS). Знакомство с Git.Системы управления версиями (VCS). Знакомство с Git.
Системы управления версиями (VCS). Знакомство с Git.Dmytro Olaresko
 
[Data Science MeetUp] Neural Network - Константин Созыкин (RoadAR): Современн...
[Data Science MeetUp] Neural Network - Константин Созыкин (RoadAR): Современн...[Data Science MeetUp] Neural Network - Константин Созыкин (RoadAR): Современн...
[Data Science MeetUp] Neural Network - Константин Созыкин (RoadAR): Современн...Provectus
 
базовые принципы работы с Git
базовые принципы работы с Gitбазовые принципы работы с Git
базовые принципы работы с GitDressTester
 
Никита Шультайс. "Система управления версиями git"
Никита Шультайс. "Система управления версиями git"Никита Шультайс. "Система управления версиями git"
Никита Шультайс. "Система управления версиями git"Egor Stremousov
 
Software engineering seminars: Docker
Software engineering seminars: DockerSoftware engineering seminars: Docker
Software engineering seminars: DockerSemen Martynov
 
Стажировка 2016-08-11 01 Юлия Ашаева. Техники тест-анализа
Стажировка 2016-08-11 01 Юлия Ашаева. Техники тест-анализаСтажировка 2016-08-11 01 Юлия Ашаева. Техники тест-анализа
Стажировка 2016-08-11 01 Юлия Ашаева. Техники тест-анализаSmartTools
 
Проблемы и пути их решения при командной разработке проектов
Проблемы и пути их решения при командной разработке проектовПроблемы и пути их решения при командной разработке проектов
Проблемы и пути их решения при командной разработке проектовАгентство AlterEGO
 
Git (presentation)
Git (presentation)Git (presentation)
Git (presentation)Anton Ivanov
 
Владимир Гриненко —Инструменты фронтенд-разработчика
Владимир Гриненко —Инструменты фронтенд-разработчикаВладимир Гриненко —Инструменты фронтенд-разработчика
Владимир Гриненко —Инструменты фронтенд-разработчикаYandex
 
Java. Lecture 12. Development Tools
Java. Lecture 12. Development ToolsJava. Lecture 12. Development Tools
Java. Lecture 12. Development Toolscolriot
 
Компонентный веб. Проникновение в дизайн / Антон Виноградов (АО "Альфа-Банк",...
Компонентный веб. Проникновение в дизайн / Антон Виноградов (АО "Альфа-Банк",...Компонентный веб. Проникновение в дизайн / Антон Виноградов (АО "Альфа-Банк",...
Компонентный веб. Проникновение в дизайн / Антон Виноградов (АО "Альфа-Банк",...Ontico
 
Scino: DVCS на примере Git
Scino: DVCS на примере GitScino: DVCS на примере Git
Scino: DVCS на примере GitSCINO
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...Nikolay Samokhvalov
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаRoman Dvornov
 

Similar to Software engineering seminars: git (20)

Software engineering seminars: jira
 Software engineering seminars: jira Software engineering seminars: jira
Software engineering seminars: jira
 
Software engineering seminars: jenkins
Software engineering seminars: jenkinsSoftware engineering seminars: jenkins
Software engineering seminars: jenkins
 
Software engineering seminars: gradle
 Software engineering seminars: gradle Software engineering seminars: gradle
Software engineering seminars: gradle
 
Фронтенд для миллионов (Орёл)
Фронтенд для миллионов (Орёл)Фронтенд для миллионов (Орёл)
Фронтенд для миллионов (Орёл)
 
Системы управления версиями (VCS). Знакомство с Git.
Системы управления версиями (VCS). Знакомство с Git.Системы управления версиями (VCS). Знакомство с Git.
Системы управления версиями (VCS). Знакомство с Git.
 
[Data Science MeetUp] Neural Network - Константин Созыкин (RoadAR): Современн...
[Data Science MeetUp] Neural Network - Константин Созыкин (RoadAR): Современн...[Data Science MeetUp] Neural Network - Константин Созыкин (RoadAR): Современн...
[Data Science MeetUp] Neural Network - Константин Созыкин (RoadAR): Современн...
 
Dev collaboration
Dev collaborationDev collaboration
Dev collaboration
 
базовые принципы работы с Git
базовые принципы работы с Gitбазовые принципы работы с Git
базовые принципы работы с Git
 
Никита Шультайс. "Система управления версиями git"
Никита Шультайс. "Система управления версиями git"Никита Шультайс. "Система управления версиями git"
Никита Шультайс. "Система управления версиями git"
 
Software engineering seminars: Docker
Software engineering seminars: DockerSoftware engineering seminars: Docker
Software engineering seminars: Docker
 
Стажировка 2016-08-11 01 Юлия Ашаева. Техники тест-анализа
Стажировка 2016-08-11 01 Юлия Ашаева. Техники тест-анализаСтажировка 2016-08-11 01 Юлия Ашаева. Техники тест-анализа
Стажировка 2016-08-11 01 Юлия Ашаева. Техники тест-анализа
 
Проблемы и пути их решения при командной разработке проектов
Проблемы и пути их решения при командной разработке проектовПроблемы и пути их решения при командной разработке проектов
Проблемы и пути их решения при командной разработке проектов
 
презентация.1
презентация.1презентация.1
презентация.1
 
Git (presentation)
Git (presentation)Git (presentation)
Git (presentation)
 
Владимир Гриненко —Инструменты фронтенд-разработчика
Владимир Гриненко —Инструменты фронтенд-разработчикаВладимир Гриненко —Инструменты фронтенд-разработчика
Владимир Гриненко —Инструменты фронтенд-разработчика
 
Java. Lecture 12. Development Tools
Java. Lecture 12. Development ToolsJava. Lecture 12. Development Tools
Java. Lecture 12. Development Tools
 
Компонентный веб. Проникновение в дизайн / Антон Виноградов (АО "Альфа-Банк",...
Компонентный веб. Проникновение в дизайн / Антон Виноградов (АО "Альфа-Банк",...Компонентный веб. Проникновение в дизайн / Антон Виноградов (АО "Альфа-Банк",...
Компонентный веб. Проникновение в дизайн / Антон Виноградов (АО "Альфа-Банк",...
 
Scino: DVCS на примере Git
Scino: DVCS на примере GitScino: DVCS на примере Git
Scino: DVCS на примере Git
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
 

More from Semen Martynov

Исследование характеристик динамического предсказания ветвлений в конвейере с...
Исследование характеристик динамического предсказания ветвлений в конвейере с...Исследование характеристик динамического предсказания ветвлений в конвейере с...
Исследование характеристик динамического предсказания ветвлений в конвейере с...Semen Martynov
 
Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц
Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матрицКэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц
Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матрицSemen Martynov
 
Корпоративная культура организации: примеры и формирование
Корпоративная культура организации: примеры и формированиеКорпоративная культура организации: примеры и формирование
Корпоративная культура организации: примеры и формированиеSemen Martynov
 
Исследование работы Кэш-памяти центрального процессора
Исследование работы Кэш-памяти центрального процессораИсследование работы Кэш-памяти центрального процессора
Исследование работы Кэш-памяти центрального процессораSemen Martynov
 
Задача выделения объекта на изображении: хаотично-фазовая синхронизация и аси...
Задача выделения объекта на изображении: хаотично-фазовая синхронизация и аси...Задача выделения объекта на изображении: хаотично-фазовая синхронизация и аси...
Задача выделения объекта на изображении: хаотично-фазовая синхронизация и аси...Semen Martynov
 

More from Semen Martynov (6)

Исследование характеристик динамического предсказания ветвлений в конвейере с...
Исследование характеристик динамического предсказания ветвлений в конвейере с...Исследование характеристик динамического предсказания ветвлений в конвейере с...
Исследование характеристик динамического предсказания ветвлений в конвейере с...
 
Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц
Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матрицКэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц
Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц
 
Корпоративная культура организации: примеры и формирование
Корпоративная культура организации: примеры и формированиеКорпоративная культура организации: примеры и формирование
Корпоративная культура организации: примеры и формирование
 
Исследование работы Кэш-памяти центрального процессора
Исследование работы Кэш-памяти центрального процессораИсследование работы Кэш-памяти центрального процессора
Исследование работы Кэш-памяти центрального процессора
 
Dauria aerospace
Dauria aerospaceDauria aerospace
Dauria aerospace
 
Задача выделения объекта на изображении: хаотично-фазовая синхронизация и аси...
Задача выделения объекта на изображении: хаотично-фазовая синхронизация и аси...Задача выделения объекта на изображении: хаотично-фазовая синхронизация и аси...
Задача выделения объекта на изображении: хаотично-фазовая синхронизация и аси...
 

Software engineering seminars: git

  • 1. Технологии разработки программного обеспечения (практика) Мартынов Семён, Хозяинов Иван Санкт-Петербургского политехнического университета Петра Великого Института компьютерных наук и технологий Кафедра компьютерных систем и программных технологий 21 октября 2017 г. Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 1 / 31
  • 2. Содержание 1 Итоги прошлого семинара Итоги теста Docker compose Новый тест 2 Git Введение Основные команды Git best practices Решение конфликтов 3 Прочее Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 2 / 31
  • 3. Итоги теста Всего сдано работ: 23 Уровень владения Linux: A15 = 3.4, Var = 1.68 Уровень владения Java: A21 = 5.1, Var = 1.39 Знакомые языки: C, C++, Java, Pascal, Python, C#, Lua, Bash, Kotlin, SQL, ASM, JS, PHP, HTML (???), CSS, Fortran, Matlab Hello World: C: 7 Java: 7 C++: 4 PHP: 2 Python: 1 Работающих решений: 68.18% Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 3 / 31
  • 4. Итоги теста Пожелания: Тесты Проектирование проектов High load cmake git gradle, maven Junit Jenkins Прим. и разраб. БД Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 4 / 31
  • 5. Разбор ДЗ Вопросы? Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 5 / 31
  • 6. Docker compose Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 6 / 31
  • 7. Docker compose: example Example (docker-compose.yml) version: ’3’ services: web: build: . ports: - "5000:5000" volumes: - .:/code - logvolume01:/var/log links: - redis redis: image: redis volumes: logvolume01: {} Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 7 / 31
  • 8. Docker compose: WP Example (docker-compose.yml) wordpress: image: wordpress links: - mariadb:mysql environment: - WORDPRESS_DB_PASSWORD=<password> ports: - "<server public IP>:80:80" volumes: - ./code:/code - ./html:/var/www/html mariadb: image: mariadb environment: - MYSQL_ROOT_PASSWORD=<password> - MYSQL_DATABASE=wordpress volumes: - ./database:/var/lib/mysql Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 8 / 31
  • 9. Тест ФИО, Группа? Сделал(а) ли я ДЗ? Как я оцениваю свой уровень владения git? В чём отличие Docker от полноценной виртуализации (VirtualBOX) и контейнерной (LXC)? Программа принимает на вход конечную строку чисел. На любимом ЯП, найдите где начинается самая длинная подпоследовательность. Вход: 1567779844645556664444416541467 Выход: 19 У меня приложение на Java + MongoDB. Мои шаги по деплою? Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 9 / 31
  • 10. Git Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 10 / 31
  • 11. Системы управления версиями Системы управления версиями: Папки (архивы) CVS (Concurrent Versions System) – 1990, GPL Perforce Helix (Perforce, P4) – 1995, Proprietary Subversion (SVN) – 2000, Apache License 2.0 Team Foundation Server (TFS) – 2005(?), Microsoft Trialware Git (гит, не джит!!!) – 7 апреля 2005, GNU GPL 2 Mercurial (Hg) – 19 апреля 2005, GNU GPL 2 Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 11 / 31
  • 12. Компании, которые использую git Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 12 / 31
  • 13. Первичная VCS в Вашей компании? Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 13 / 31
  • 14. Что значит "Распределённый"? Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 14 / 31
  • 15. Как работает git? Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 15 / 31
  • 16. Основные возможности, плюсы (почти) Все локально, можно работать без интернета Контроль, можно удалить коммит, разбить на несколько, поменять местами Мерджить ветки одно удовольствие Коммит изменений, а не файлов Наглядные и мощные диф и лог Stash для многостаночников Bisect и Blame чтобы найти крайнего Субмодули для сложных проектов Ориентация на работу в команде GUI для котиков и консоль для красноглазиков Платформы GitHub, BitBucket Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 16 / 31
  • 17. Основные возможности, минусы Отсутствие сквозной нумерации коммитов Использование такииииих длиииииинных хешей SHA1 для идентификации ревизий SHA1 (Линус сказал что у него есть план) Система работает только с файлами и их содержимым, и не отслеживает пустые каталоги Накладные расходы при работе с несвязными данными (Используйте p4?!) 3 шага чтобы показать свой код... Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 17 / 31
  • 18. Три шага вместо одного (в SVN) Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 18 / 31
  • 19. Основные команды Создание репозитория $ git init Клонирование из определённого источника $ git clone [url] Добавление/Удаление файлов в индекс $ git add file1 file2 ... $ git add dir $ git add --all $ git rm file1 file2 ... Коммит в локальный репозиторий $ git commit file1 file2 ... [-m msg] $ git commit -a [-m msg] $ git commit --amend file1 file2 ... [-m msg] Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 19 / 31
  • 20. Основные команды: статус Отправка своих изменений на сервер $ git push [remote] $ git push remote branch $ git pull remote Статус и изменения $ git status $ git diff Просмотр истории $ git log $ git log --author=author $ git log --after="MMM DD YYYY" $ git blame file rev Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 20 / 31
  • 21. Работа с ветками Просмотр веток $ git branch $ git branch -r Переключение между ветками и коммитами $ git checkout branch $ git checkout rev Создание/удаление веток $ git checkout -b branch $ git branch -d hotfix Переключение веток без потери изменений $ git stash $ git checkout branch $ git git stash pop Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 21 / 31
  • 22. Git best practices Первичная настройка (опционально: gravatar) $ git config --global user.name "YOUR NAME" $ git config --global user.email "YOUR_EMAIL@EXAMPLE.COM" Всегда смотреть индекс перед коммитом $ git status Делать связь между номером задачи и коммитом $ git commit -am "issue-123: blah-blah-blah..." Делать частые коммиты при работе, но пушить одним изменением $ git rebase -i HEAD~3 Удалить (откатить) последний локальный коммит $ git reset HEAD~ Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 22 / 31
  • 23. Git best practices Перемещение файлов и директорий $ git mv path1 path2 Не комитить (т.е. стараться избегать) бинарные ресурсы $ echo "Git is not intended for it." Комбинировать коммиты $ git commit --amend --no-edit Не делать rebase уже отданных изменений $ git rebase --interactive ... не использовать –force на отданных ветках! $ git push --force Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 23 / 31
  • 24. Модели работы с git Git flow (Vincent Driessen) GitHub flow (Scott Chacon) GitLab Flow (Sytse Sijbrandij) Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 24 / 31
  • 25. Основные ветки Центральный репозиторий всегда содержит две ветки с неограниченным сроком жизни: master – в любой момент времени содержит production-ready код, каждый коммит в эту ветку считается новым релизом продукта develop – содержит последний срез разработки, который готовится к релизу Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 25 / 31
  • 26. Ветки поддержки Feature branches Используется для разработки новых функциональных возможностей и исправления ошибок. Когда начинается реализация функции, может быть неизвестно, в какой релиз она будет включена, но обычно существует 2-3 дня. Порождается и вливается в ветку develop. Release branches Ветка предназначена для подготовки кода к релизу. Позволяет вставить последние минорные изменения и добавить мета-данные (номер версии, дата сборки, и т.д.). Срок жизни 1-2 часа, порождается от develop, вливается в develop и master. Hotfix branches Эти ветки необходимы, когда в уже выпущено продукте обнаруживается критический баг, который необходимо срочно исправить. Срок жизни – чем меньше, тем лучше. Порождаются от master, должны вливаться в develop и master. Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 26 / 31
  • 27. Используйте Pull requests Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 27 / 31
  • 28. Решение конфликтов В какой ситуации могут возникнуть конфликты? Получили конфликт $ git checkout featuredo-something-god Switched to branch ’featuredo-something-god’ $ git merge develop Auto-merging lib/hello.html CONFLICT (content): Merge conflict in lib/hello.html Automatic merge failed; fix conflicts and then commit the resul Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 28 / 31
  • 29. Решение конфликтов Как выглядит конфликтный файл? Файл: lib/hello.html <!-- Author: Semen Martynov (semen.martynov@gmail.com) --> <html> <head> <<<<<<< HEAD <link type="text/css" rel="stylesheet" media="all" href="st ======= <!-- no style --> >>>>>>> develop </head> <body> <h1>Hello,World! Life is great!</h1> </body> </html> Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 29 / 31
  • 30. Решение конфликтов Возможные решения: Отредактировать файл git checkout –ours lib/hello.html git checkout –theirs lib/hello.html сохранить: Файл: lib/hello.html $ git add lib/hello.html $ git commit -m "Merged master fixed conflict." Recorded resolution for ’lib/hello.html’. [style 645c4e6] Merged master fixed conflict. И это победа! Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 30 / 31
  • 31. ДЗ: Написать сервис валидации JSON файлов. На вход поступает некий файл, на выход либо форматированный JSON либо сообщение об ошибке. Работу вести в публичном git репозитории. Обеспечить запуск из Docker. Вопросы? Замечания? Дополнения? Мартынов Семён, Хозяинов Иван ТРПО (практика) 21 октября 2017 г. 31 / 31