Вернуться к содержанию курса
Системы контроля версий - Git
Материалы для самоподготовки
Основные материалы - Git
- Видео: Learn - Version control with GIT
- Книга: Pro Git (1, 2, 3, 5 главы обязательны для изучения)
- Habr: Удачная модель ветвления для Git
Дополнительные материалы - Git
- Приложение для тренировки навыков работы в GIT
Практическая работа
-
Создайте учетную запись на Github.
Все последующие практические работы нужно будет сохранять в этой учётной записи, в других репозиториях.
- Установите и настройте git и клиент для него.
Варианты клиентов:
-
Создайте новый репозиторий в своем аккаунте на Github и склонируйте его себе на рабочую машину.
- Выполните все следующие операции в любом удобном вам порядке:
- commit
- create new branch (создайте несколько дополнительных веток)
- merge (без конфликтов слияния)
- merge (с конфликтами слияния)
- push
- pull (можете внести изменения в файлы через сайт Github и затем спуллить изменения)
- pull с конфликтами слияния (для этого нужно изменить одну и ту же строчку в файле в локальном репозитории и в репозитории на Github, после чего сделать pull)
- rebase
- revert
- tags (создайте несколько тегов, проверьте что они будут запушены на Github)
- stash
- cherry-pick
- reset
- Удостоверьтесь, что вы действительно поняли смысл каждой команды и логику ее работы.
- Запуште итоговый результат всех изменений в ваш центральный репозиторий на Github.
- Закройте цель и подцели, укажите в комментарий ссылку на репозиторий.
Вопросы для самоконтроля
Version Control System
- Для чего необходима система контроля версий (VCS)? Чем она полезна? Какие бывают виды VCS?
- Что такое Git? Есть ли альтернативы?
- В чем отличие рабочей директории (working directory), локального репозитория (local repository) и центрального
репозитория (central repository)?
Git - Commands
- Что такое commit?
- Что такое branch? Для чего он нужен?
- Что такое merge?
- Что такое tag? Для чего они нужны?
- Что такое rebase? Для чего его применяют?
- Что такое revert?
- Что такое reset?
- Что такое stash? Чем он полезен?
- Что такое cherry-pick? Чем он полезен?
- Что такое Head?
- Как объединить два бранча? Что будет результатом?
- Что такое merge-conflict? Почему они возникают? Как их решить?
- Что такое репозиторий?
- Что такое pull\push? Что такое pull-request (merge-request)?
Git - Cases
- Что такое git flow? Расскажите, как вы его понимаете? Опишите по шагам весь процесс. Для чего нужны master и develop ветки?
- Вам необходимо избежать попадания файлов вида *.class в центральный репозиторий из рабочей директории, что будете делать?
- Вы сделали объемные изменения в множестве файлов, сделали коммит и запушили его в центральный репозиторий. Тут же вы поняли, что это изменение некорректно и его не должно быть в коде. Что будете делать?
- Вы сделали несколько новых коммитов в локальном репозиторий. Ваш коллега в это время запушил в центральный репозиторий в эту же ветку несколько своих коммитов (изменения в других файлах).
Вы хотите запушить свои изменения в центральный репозиторий. Сможете ли вы это сделать? Ваши действия?
- Вы с коллегой поменяли один и тот же файл, одни и те же строки (изменили логику работы одного и того же функционала).
Как объединить изменения в Git? Как разрешить конфликт слияния? Как определить, чей вариант изменений должен остаться в репозитории?
- Вы с коллегой поменяли один и тот же java-файл, но разные методы. При этом вы работали в ветке SUPER-FEATURE-А, а коллега в ветке SUPER-FEATURE-В. У вас и у него после изменений программа работает корректно.
После этого вы замержили ветку коллеги в свою (при мерже конфликтов не возникло). Говорит ли отсутствие конфликтов слияния о работоспособности получившегося результата программы?