Салют 👋,
Данная лабораторная работа посвящена изучению систем обмена данными. Работа позволит ознакомиться с базовыми навыками необходимыми для произведения commit changes, публикации изменений в удаленный репозиторий, обновлениями данных для них, fork и тд.
Для сдачи данной работы также будет требоваться ответить на дополнительные вопросы по описанным темам.
lab01
├── README.md
└── typersteel.pyGit — распределённая система контроля версий. Ключевые концепции:
- Working tree — файлы на диске, с которыми вы работаете
- Staging area (index) — промежуточная область:
git addпереносит изменения сюда - Commit — снимок состояния, сохранённый в локальном репозитории
- Remote — удалённый репозиторий (GitHub), синхронизация через
push/pull
Поток:
edit→git add→git commit→git push— это базовый цикл, который вы будете повторять в каждой лабораторной
- Ветки (branches) — параллельные линии разработки.
master/main— основная ветка,develop— рабочая,patch*— для исправлений - Pull Request — запрос на слияние ветки в основную. Используется для code review и согласования изменений
- Rebase — перенос коммитов на другую базу. Создаёт линейную историю, но переписывает SHA-хеши
- GPG-подпись — криптографическое подтверждение авторства коммита. GitHub показывает зелёный бейдж
Verified
Файл typersteel.py — пример Python-скрипта с использованием библиотеки typer для создания CLI-приложений. В задании вы будете модифицировать его: от простого "Hello World" до полноценного CLI с аргументами и опциями.
- 1. Зарегистрироваться на почтовом сервисе Gmail. В случае наличия аккаунта - не требуется
- 2. Зарегистрироваться на сервисе совместной разработки GitHub. В случае наличия аккаунта требуется произвести дополнительные настройки и обновить данные персонификации
- 3. Отправить зарегистрированный адрес почтового ящика личным сообщением
- 4. Отправить зарегистрированный логин личным сообщением
- 5. Ознакомиться со ссылками учебного материала и формализованными требованиями из основного описания
- 6. Сгенерировать SSH ключ и добавить его в список ключей для сервиса GitHub
- 7. Сгенерировать Personal Token с правами gist и сохранить его в файл
- 8. Сгенерировать GnuPG для подтверждения подписания коммитов и возможно использование Х.509 (включить в отчет описание, что такое
smimesign) - 9. Подготовить глобальные переменные окружения для GitHub
- 10. Ознакомиться с материалами
ghсервиса и использовать их для авторизации,commit,pull requestи тд. - 11. Выполнить инструкцию учебного материала
- 12. Оформить
README.mdпо аналогии и использоватьshield, etc. - 13. Составить
gistотчет и отправить ссылку личным сообщением
Перед началом выполните подготовительные инструкции:
- Подготовка рабочего окружения — VirtualBox, установка Linux
- Настройка Git, GPG и GitHub CLI — git config, SSH, GnuPG, gh
- 1. Создайте локальный репозиторий на машине и проинициализируйте его
- 2. Авторизуйтесь и используйте
GitHub CLIдля создания удаленного репозитория - 3. Создайте пустой README.md и используйте указание URL своего созданного репозитория для присвоения ветки
masterстатусаorigin - 4. В локальном репозитории сделайте
commitи публикацию с флагом-Sв удаленный репозиторий - 5. Создайте файл
hello.py. Реализуйте Hello appsec world на языке python используя несколько интерпретаторов с "грязным" кодом. Сделайтеcommitс флагом-S - 6. Измените исходный код, чтобы скрипт запрашивал имя пользователя и выводил
Hello appsec world from @name. Сделайтеcommitс флагом-Sи публикацию. Проверьте историю изменений - 7. В локальном репозитории создайте ветку
patch1и внесите изменения исправлению кода и модернизации до следующего вида, чтобы код был рабочим. Сделайте публикацию своегоcommitс флагом-Sв удаленный репозиторий:
import typer
def main(
name: str,
lastname: str = typer.Option("", help="Фамилия пользователя."),
formal: bool = typer.Option(False, "--formal", "-f", help="Использовать формальное приветствие."),
):
"""
Говорит "Привет" пользователю, опционально используя фамилию и формальный стиль.
"""
if formal:
print(f"Добрый день, {name} {lastname}!")
else:
print(f"Привет, {name}!")
if __name__ == "__main__":
typer.run(main)- 8. Проверьте, что ветка
patch1в удалённом репозитории - 9. Создайте
pull-requestв видеpatch1 -> master - 10. В ветке
patch1добавьте в исходный код комментарии и убедитесь, что есть указанные изменения вpull-request - 11. В удалённом репозитории выполните слияние
pull-requestдляpatch1 -> masterи удалите веткуpatch1 - 12. Стяните последние актуальные изменения и просмотрите историю изменений для
master. Удалите локальную веткуpatch1 - 13. Создайте новую локальную ветку
patch2. Измените code style по своему усмотрению - 14. Сделайте публикацию своего
commitс флагом-Sи создайте pull-requestpatch2 -> master - 15. В ветке master удаленного репозитория явно измените комментарий. Увидите, что в
pull-requestпоявились расхождения - 16. Локально сделайте rebase и исправьте расхождения (это называется конфликт)
- 17. Сделайте
commitи опубликуйте изменения в веткеpatch2. Убедитесь, что пропали конфликты - 18. Сделайте
mergeдляpull-requestpatch2 -> master - 19. Подготовьте отчет
gist. Продемонстрируйте историю коммитов на локальном и удаленном репозитории
Если столкнулись с проблемами — смотрите Troubleshooting.