Основы программировния морских роботов

Системы контроля версий

logo
smtu logo

Организационное объявление

  • для тех кто отстает

  • для тех кому хочется быстрее

План занятия

  • зачем нужны системы контроля версий

  • основные понятия git: репозиторий, commit, push, branch

  • GitLab и совместная работа

  • Практическая часть

  • ДЗ

Постановка проблемы

…​была ли у вас папка с файлами "диплом", "диплом 2", "диплом 3", "диплом финальная версия", "диплом финальная версия 2", "диплом финальная версия 2 с правками"?..

new folder

Если взглянуть шире

  • программирование - это в каком-то смысле написание текстов

  • разработка электроники и конструкторской документации - тоже

Какие проблемы возникают

  • потеря данных (случайное удаление не того, затирание и т.д.)

  • отсутствие истории изменений

  • необходимость отката к предыдущим версиям

  • синхронизация работы команды

    • управление правами пользователя

  • необходимость параллельной разработки

  • автоматизация

Системы контроля версий

  • появились в 1970-е годы (SCCS)

  • используются подавляющим большинством программистов

  • мы будем работать с git

git: общая информация

  • де-факто стандарт в мире программирования (80..95% рынка)

  • используется для хранения и управления ядром Linux

  • бесплатный и открытый

git logo

git: чуть подробнее

  • в базе - это консольная утилита

  • имеет множество графических оболочек (gitk, git-cola)

  • имеет множество web-надстроек (github, gitlab)

  • зачастую встроено в IDE

Несколько примеров

Основные понятия

Репозиторий

  • создается локально

  • просто папка с подпапкой “.git”

  • хранит версии проекта

  • может быть клонирован

  • может взаимодействовать с другими репозиториями

    $ git clone <адрес>
repository

История изменений

  • git log

  • git-cola

  • web-версия

Коммит (commit)

  • основной конструктивный элемент

  • снимок состояния репозитория

  • имеет текстовое описание

  • может иметь родительские коммиты

  • может иметь дочерние коммиты

    $ git add <filename>
    $ git commit -m "Текст коммита"
commits

ВАЖНО!

  • Атомарность

    • не должно быть коммитов “добавлен расчёт корней квадратного корня и исправлены опечатки”

  • названия веток пишутся на английском языке, начинаются с маленькой буквы, слова разделяются нижним подчеркиванием: “replace_ldo”

  • описания коммитов начинаются с большой буквы, продолжают фразу “Если применить этот коммит то будет…” и не заканчиваются точкой: “Добавлена ссылка на автора исходного текста”

При первом коммите

git config --global user.name "Ваше Имя"
git config --global user.email "ваша@почта.com"

Синхронизация с сервером

  • все ваши коммиты локальны, т.е. происходят только в вашем репозитории

  • для отправки ваших коммитов требуется выполнить команду

    $ git push
  • для обновления репозитория, можно получить данные с сервера командой

    $ git pull

Ветвление

  • объединяет несколько коммитов

  • имеет название

  • cоздаётся из коммита-родителя

  • может слиться с другой веткой

  • обновляется из удаленного репозитория

  • обновляет удаленный репозиторий

    $ git branch <branchname>
    $ git checkout <branchname>
git branch

push новой ветки

$ git push
fatal: The current branch mnc has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin mnc

To have this happen automatically for branches without a tracking
upstream, see 'push.autoSetupRemote' in 'git help config'.

Комплексные понятия

Git flow

git flow

Merge request

  • Merge requests

  • New merge request

  • Выбрать "Source branch" (ваша) и "Target branch" (main)

  • Нажать кнопку "Compare branch and continue"

    • Далее опционально - заполнить поля

  • Нажать кнопку "Create merge request"

Сегодня я многое понял

  • зачем нужны системы контроля версий

  • GitLab

  • основные понятия git: репозиторий, commit, push, branch

KyleBroflovski

Шпаргалка

vcs cheatsheet

Дополнительные материалы

Как работать с gitlab через ssh

https://docs.gitlab.com/ee/user/ssh.html

https://docs.gitlab.com/ee/user/ssh.html

Книга "ProGit"

https://git-scm.com/book/ru/v2

https://git-scm.com/book/ru/v2

ВАЖНО!

  • коммиты должны быть атомарны

    • не должно быть коммитов “добавлен расчёт корней квадратного корня и исправлены опечатки”

  • названия веток пишутся на английском языке, начинаются с маленькой буквы, слова разделяются нижним подчеркиванием: “replace_ldo”.

  • описания коммитов начинаются с большой буквы, продолжают фразу “Если применить этот коммит то будет…” и не заканчиваются точкой: “Добавлена ссылка на автора исходного текста”

Домашнее задание

$ git clone http://sdb.smtu.ru/gitlab/marinerobotics/lesson-02.git
  1. склонировать репозиторий

  2. создать новую ветку, используя ваши ФИО

  3. отредактировать файл README.md

  4. сделать commit и push

  5. проконтролировать появление ветки на gitlab

  6. сделать merge request в gitlab

  7. задача со звёздочкой: поработать не через логин-пароль а через ssh