Курс обучения программированию на Java | Сайт проекта

< Курс обучения программированию на Java >

Вернуться к содержанию курса

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

Материалы для самоподготовки

Основные материалы - Git

  1. Видео: Learn - Version control with GIT
  2. Книга: Pro Git (1, 2, 3, 5 главы обязательны для изучения)
  3. Habr: Удачная модель ветвления для Git

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

  1. Приложение для тренировки навыков работы в GIT

Практическая работа

  1. Создайте учетную запись на Github.
    Все последующие практические работы нужно будет сохранять в этой учётной записи, в других репозиториях.

  2. Установите и настройте git и клиент для него.
    Варианты клиентов:
  3. Создайте новый репозиторий в своем аккаунте на Github и склонируйте его себе на рабочую машину.

  4. Выполните все следующие операции в любом удобном вам порядке:
    • commit
    • create new branch (создайте несколько дополнительных веток)
    • merge (без конфликтов слияния)
    • merge (с конфликтами слияния)
    • push
    • pull (можете внести изменения в файлы через сайт Github и затем спуллить изменения)
    • pull с конфликтами слияния (для этого нужно изменить одну и ту же строчку в файле в локальном репозитории и в репозитории на Github, после чего сделать pull)
    • rebase
    • revert
    • tags (создайте несколько тегов, проверьте что они будут запушены на Github)
    • stash
    • cherry-pick
    • reset
  5. Удостоверьтесь, что вы действительно поняли смысл каждой команды и логику ее работы.
  6. Запуште итоговый результат всех изменений в ваш центральный репозиторий на Github.
  7. Закройте цель и подцели, укажите в комментарий ссылку на репозиторий.

Вопросы для самоконтроля

Version Control System

  1. Для чего необходима система контроля версий (VCS)? Чем она полезна? Какие бывают виды VCS?
  2. Что такое Git? Есть ли альтернативы?
  3. В чем отличие рабочей директории (working directory), локального репозитория (local repository) и центрального репозитория (central repository)?

Git - Commands

  1. Что такое commit?
  2. Что такое branch? Для чего он нужен?
  3. Что такое merge?
  4. Что такое tag? Для чего они нужны?
  5. Что такое rebase? Для чего его применяют?
  6. Что такое revert?
  7. Что такое reset?
  8. Что такое stash? Чем он полезен?
  9. Что такое cherry-pick? Чем он полезен?
  10. Что такое Head?
  11. Как объединить два бранча? Что будет результатом?
  12. Что такое merge-conflict? Почему они возникают? Как их решить?
  13. Что такое репозиторий?
  14. Что такое pull\push? Что такое pull-request (merge-request)?

Git - Cases

  1. Что такое git flow? Расскажите, как вы его понимаете? Опишите по шагам весь процесс. Для чего нужны master и develop ветки?
  2. Вам необходимо избежать попадания файлов вида *.class в центральный репозиторий из рабочей директории, что будете делать?
  3. Вы сделали объемные изменения в множестве файлов, сделали коммит и запушили его в центральный репозиторий. Тут же вы поняли, что это изменение некорректно и его не должно быть в коде. Что будете делать?
  4. Вы сделали несколько новых коммитов в локальном репозиторий. Ваш коллега в это время запушил в центральный репозиторий в эту же ветку несколько своих коммитов (изменения в других файлах). Вы хотите запушить свои изменения в центральный репозиторий. Сможете ли вы это сделать? Ваши действия?
  5. Вы с коллегой поменяли один и тот же файл, одни и те же строки (изменили логику работы одного и того же функционала). Как объединить изменения в Git? Как разрешить конфликт слияния? Как определить, чей вариант изменений должен остаться в репозитории?
  6. Вы с коллегой поменяли один и тот же java-файл, но разные методы. При этом вы работали в ветке SUPER-FEATURE-А, а коллега в ветке SUPER-FEATURE-В. У вас и у него после изменений программа работает корректно. После этого вы замержили ветку коллеги в свою (при мерже конфликтов не возникло). Говорит ли отсутствие конфликтов слияния о работоспособности получившегося результата программы?