Цель работы: Закрепить на практике работу с удаленными репозиториями, освоить процесс перебазирования, научиться управлять конфигурацией Git и работать с тегами.
Команды для использования в работе: git clone, git config, git remote, git branch, git switch/checkout, git add, git commit, git rebase, git tag, git fetch, git push.
1.1. Сделайте форк этого репозитория, нажав "Fork" в левом верхнем углу экрана.
1.2. На странице репозитория СВОЕГО ФОРКА скопируйте URL.
На вашем компьютере, перейдите в папку, в которой будет ваш репозиторий. Откройте там терминал.
Через терминал, склонируйте себе репозиторий. Теперь у вас есть локальная копия репозитория.
1.3. Установите локальные настройки имени пользователя и email для этого конкретного репозитория (это важно для отслеживания авторства коммитов).
Заметка: Проверить, что настройки применились, можно командой git config --list. Вы должны увидеть установленные вами значения в конце списка.
1.4. По умолчанию, удаленный репозиторий с именем origin указывает на ваш форк. Теперь нужно добавить связь с исходным репозиторием, чтобы получать из него обновления. Это репозиторий, который вы форкали.
Измените свой удалённый репозиторий, дав удаленному репозиторию имя upstream (общепринятая практика).
Проверьте список всех удаленных репозиториев: git remote -v. У вас должно быть два: origin (ваш форк) и upstream (репозиторий преподавателя).
2.1. На ветке main, найдите в репозитории файл player.gd. Откройте этот файл в блокноте (или другом редакторе кода). Найдите и УВЕЛИЧЬТЕ константу "WALK_MAX_SPEED". Сохраните файл. Добавьте файл в индекс и создайте коммит.
2.2. Перейдите в ветке main на 1 коммит назад. В нём, создайте и переключитесь на новую ветку с именем feature. Переходить на несколько коммитов назад можно через HEAD~N, где N - число коммитов, на которые вы хотите откатиться.
2.3. В репозитории найдите файл player.gd. Откройте этот файл в блокноте (или другом редакторе кода). Найдите и УМЕНЬШИТЕ константу "WALK_MAX_SPEED". Сохраните файл. Добавьте файл в индекс и создайте коммит.
2.4. В репозитории найдите файл tile_map.gd. В функции _process(delta: float) в условии if layer_alpha > 0.3: измените конечное значение для сравнения. Сохраните файл. Добавьте файл в индекс и создайте коммит.
2.5. Представьте, что пока вы работали, преподаватель внес важные изменения в исходный репозиторий (в ветку main репозитория upstream). Вам нужно получить эти изменения через git fetch.
Эта команда загрузит последние коммиты из upstream/main в ваш локальный репозиторий, но не будет сливать их с вашей рабочей веткой.
2.6. Теперь вам нужно "переместить" вашу ветку feature на вершину только что полученных изменений из upstream/main. Это сделает историю проекта линейной и чистой.
Убедитесь, что вы находитесь в ветке feature. Выполните перебазирование.
Если конфликтов не возникло, rebase пройдет успешно. Ваш коммит теперь будет находиться поверх актуального состояния upstream/main.
3.1. Так как вы переписали историю (rebase), обычный push не сработает. Нужно отправить изменения с принудительной заменой (--force-with-lease — это безопасная альтернатива --force).
3.2. Ваша работа завершена и готова к "релизу". Создайте аннотированный тег для текущего состояния. Отправьте созданный тег на удаленный репозиторий origin.
3.3. Представьте, что репозиторий upstream больше не нужен. Удалите его из списка удаленных репозиториев.
Проверьте, что он исчез: git remote -v. Должен остаться только origin.
- Ссылка на ваш форк репозитория. В вашем форке должны быть:
- Ветка
featureс обновленными файламиplayer.gdиtile_map.gd. - Тег
v1.0.0, указывающий на последний коммит в веткеfeature.
- Ветка
- Скриншоты, где последовательно видны:
- ваш форк в изначальном состоянии.
git remote -v(после добавленияupstream).git config --list(где видны ваши локальные настройки).git log --oneline --graph --all(показывает историю после rebase).git tag -n(показывает список тегов с комментариями).
- В чем основное различие между аннотированным тегом и легковесным тегом? Когда стоит использовать каждый из них?
- Объясните своими словами, в чем ключевая разница между
git fetchиgit pull. В каком случае вы предпочли бы использоватьfetch + merge, а в какомfetch + rebase? Аргументируйте свой ответ. - В чём разница между
git rebaseиgit merge? В каких случаях их нужно использовать?