Лабораторная работа № 3

Git и каталог книг

Добавьте карточку книги в общий проект через fork и pull request. Затем исправьте её по замечанию в том же pull request.

Открыть учебный репозиторий

Задача

Предложите изменение команде

Команда ведёт учебный каталог книг на GitHub. Вам нужно добавить отдельный Markdown-файл с карточкой книги, показать изменение на проверку и исправить его по замечанию. Цель — показать, что вы умеете создать fork, предложить изменение через pull request и доработать его после review. Программировать приложение не требуется.

Работа выполняется индивидуально. Ориентир по времени — 90 минут. Если замечание преподавателя придёт позже, завершите исправление после занятия.

Понадобятся учётная запись GitHub и учебный репозиторий.

Перед началом

Посмотрите устройство проекта

Откройте репозиторий на GitHub. Найдите README.md, шаблон карточки, готовый пример, папку books/ и .gitignore. Посмотрите историю одного файла: кто и когда внёс изменение.

Придумайте название вымышленной книги в духе классической литературы. Каждый участник создаёт отдельный файл для своей книги; общий список редактировать не нужно.

Выберите один способ

Вариант А — локальный Git: работа на компьютере с командами. Вариант Б — сайт GitHub: достаточно браузера, устанавливать Git не нужно. Выполните один вариант; карточка, оформление PR и критерии проверки одинаковые.

Вариант А · Локальный Git

Через Git на компьютере

  1. Получите копию. Зарегистрируйтесь на GitHub, если нужно. Сделайте fork учебного репозитория, склонируйте свой fork на компьютер и создайте отдельную ветку, например add-my-book.
  2. Добавьте карточку. Создайте в books/ Markdown-файл по образцу. В качестве имени файла используйте свой логин GitHub, например books/your-github-login.md. Укажите придуманное название книги, автора или авторов, год и короткое описание. Автора, год и описание тоже придумайте: это учебная карточка вымышленной книги.
  3. Проверьте изменение. Посмотрите git status. Добавьте только нужный файл в индекс и посмотрите git diff --cached. Убедитесь, что в коммит попадёт именно ваша карточка, затем сделайте коммит с понятным сообщением. Можно добавить фамилию, имя и группу: Добавить книгу «Тени старого сада» — Иванов Иван, ИС-21.
  4. Предложите изменение. Отправьте ветку в свой fork и откройте pull request из этой ветки в основной репозиторий. Название PR — название книги, например «Тени старого сада». В описании обязательно укажите фамилию, имя и учебную группу, затем напишите, что добавили и что проверили. Один студент — один PR.
  5. Исправьте замечание. Прочитайте комментарий преподавателя, измените карточку в той же ветке, сделайте второй коммит и отправьте ветку снова. Исправление появится в уже открытом pull request. Ответьте на замечание: что исправили и в каком коммите.
  6. Проверьте принятие. После одобрения преподаватель добавит изменение в основной репозиторий. Найдите свою карточку в его ветке main.

Fork — ваша копия проекта на GitHub; clone — копия на компьютере. Pull request позволяет показать разницу и обсудить её до включения в основной проект.

Проверка преподавателя

Доработайте тот же pull request

Преподаватель проверяет изменения во вкладке Files changed и оставляет review:

Если PR имеет статус Closed без Merged, изменение закрыто без добавления. Прочитайте причину и уточните дальнейшие действия у преподавателя.

Подсказка

Команды для варианта А

Замените адрес, название ветки и имя файла на свои. Не копируйте угловые скобки из примера буквально.

git clone <адрес-вашего-fork>
git switch -c add-my-book
git status
git add books/<имя-файла>.md
git diff --cached
git commit -m "Добавить карточку вымышленной книги"
git push -u origin add-my-book

После исправления замечания:

git diff
git add books/<имя-файла>.md
git commit -m "Исправить карточку вымышленной книги"
git push

Если Git просит указать имя и электронную почту автора коммита, настройте их по инструкции преподавателя. Перед первым коммитом проверьте, какой адрес будет виден в истории публичного репозитория.

Вариант Б · Без терминала

Через сайт GitHub

Установка Git и терминал не нужны. Выполните этот вариант вместо локальных команд варианта А. Карточка книги и требования к PR одинаковые для обоих способов.

  1. Создайте fork. Войдите в GitHub, откройте учебный репозиторий, нажмите Fork → Create fork. Дальше работайте в копии под своим логином.
  2. Создайте ветку. В своём fork откройте переключатель main, введите add-my-book и выберите создание новой ветки. Убедитесь, что выбрана она.
  3. Создайте карточку. Скопируйте содержимое BOOK_TEMPLATE.md. В своей ветке откройте books/, затем Add file → Create new file. Имя файла — ваш-логин.md; вставьте шаблон и заполните поля вымышленной книги.
  4. Сохраните коммит. Просмотрите карточку через Preview, нажмите Commit changes…, напишите понятное сообщение и сохраните изменение в текущую ветку add-my-book. Фамилию, имя и группу можно добавить в сообщение.
Форма создания файла книги в папке books и выбранной ветке GitHub
Скриншот 1. В папке books/ укажите имя файла и заполните карточку. На снимке учебная ветка преподавателя; у вас должна быть ветка add-my-book в собственном fork. Нажмите на изображение, чтобы увеличить.
Окно Commit changes с примером сообщения и сохранением в текущую ветку
Скриншот 2. Укажите сообщение коммита и выберите Commit directly to the … branch, чтобы сохранить изменение в текущую ветку. Адрес автора коммита на снимке скрыт.
  1. Откройте PR. В своём fork с выбранной веткой нажмите Contribute → Open pull request. Если этой кнопки нет, откройте Pull requests → New pull request → compare across forks в исходном репозитории.
  2. Проверьте направление. Слева, в base repository, должен быть denrad/book-catalog-git-lab, ветка base: main. Справа, в head repository / head fork, — ваш fork, compare: add-my-book. Просмотрите разницу: должна добавляться только ваша карточка.
  3. Заполните PR. Нажмите Create pull request. Заголовок — название книги; описание — фамилия, имя, группа, что добавлено и что проверено. Отправьте PR кнопкой Create pull request. Не оставляйте его черновиком.
Сравнение base main и учебной ветки с одной изменённой карточкой
Скриншот 3. Проверьте направление base: main ← compare: add-my-book и список изменений. На снимке обе ветки в репозитории преподавателя, потому что это демонстрация. В вашей работе выберите свой fork как источник изменений.
Форма pull request с названием книги и сведениями о студенте в описании
Скриншот 4. В заголовке PR укажите название книги. В описании напишите фамилию, имя, группу, что добавили и проверили. Данные на снимке приведены только для примера.
  1. Исправьте замечание. После review откройте свой fork, выберите ту же ветку add-my-book, откройте карточку и нажмите карандаш (Edit this file). Исправьте текст, нажмите Commit changes… и сохраните новый коммит в текущую ветку. Новый PR и новая ветка не нужны; отдельный push при работе на сайте не требуется.
  2. Проверьте обновление и результат. Вернитесь в прежний PR: проверьте новый коммит и изменения в Files changed, ответьте на замечание преподавателя. После одобрения и merge найдите карточку в main исходного репозитория.

Результат

Ссылка на ваш pull request

Открытый pull request в учебном репозитории — ваша сдача работы. Отдельное письмо со ссылкой на профиль GitHub не требуется. В PR должны быть видны:

  1. Карточка книги в отдельном Markdown-файле.
  2. Первый коммит с добавлением карточки.
  3. Замечание преподавателя и второй коммит с исправлением в том же pull request.
  4. Фамилия, имя и группа в описании; название книги в заголовке PR.
  5. Одобрение преподавателя и статус Merged после принятия.
  6. Отсутствие случайных файлов в изменениях.

Не закрывайте и не создавайте новый pull request ради исправления. Если замечание непонятно, уточните его в обсуждении. Скриншот или отдельный документ не заменяют ссылку: результат работы — сам репозиторий и история изменения.

Самопроверка

Что важно проверить

Будьте готовы объяснить: чем fork отличается от clone и ветки; где находится ваш коммит до merge; почему новый коммит обновляет тот же PR; чем Approve отличается от Merge.

.gitignore помогает не добавлять локальные файлы, но не удаляет из истории то, что уже попало в коммит.