Git Bootcamp 1.0 - черновик программы
Kirill Kazarin (aka @Rumataistorsky, https://t.me/kazarin_online)Вместе (и про спонсировании) с учебным центром Слерм решили делать bootcamp по git и управлению версиями. Примерно то, как мы это сделали в свое время в формате bootcamp для Linux.
Формат: 7-10 днвный интенсив, с нуля до хорошего базового уровня владения с пониманием что происходит.
Целевая аудитория: люди кто с гитом не работал и надо вкатиться
В своем TG канале я задал вопрос опытным коллегам - что бы они хотели видеть на таком курсе. Собрав обратную связь, плюс свои мысли - сделал видение программы. Впереди - обсуждение с руководством центра и, если утвердят, реализация.
Как говориться - следите за новостями. А далее поделюсь тем самым черновиком программы (v.01) который возможно станет и финальной версией (ну или претерпит кучу правок)
День 1. Контекст и устройство
Обязательно:
- История VCS: RCS → SVN → Git, почему централизованные проиграли
- Параллельная история: Mercurial (Hg) - почему он появился в то же время, что и Git, чем был хорош и почему всё равно проиграл.
- Коротко про битву 2005-2010х: Mozilla, Python, Facebook были на Hg - и что их заставило уйти
- История создания Git: Линус Торвальдс, скандал с BitKeeper в 2005 году,
- недовольство существующими инструментами, требования к скорости и распределённости на уровне ядра Linux.
- Первый коммит Git - в репозитории самого Git, показать студентам
Обязательно:
- Что хранить можно, что нельзя: код, конфиги, документация
- да: секреты, бинари,
- образы - нет, и почему
- Как Git устроен под капотом: объекты (blob, tree, commit, tag), DAG, SHA
- Клиенты: консоль, VS Code, JetBrains IDEA, GUI-клиенты
- Установка под Windows, Linux, macOS - нюансы каждой платформы
День 2. Конфигурация и стандарты проекта
Обязательно:
- ~/.gitconfig: имя, почта, редактор, алиасы, credential helper
- Уровни конфига: system → global → local → worktree, что перекрывает что
- Служебные файлы Git:
- .gitignore - паттерны, глобальный ignore
- .gitattributes - line endings, diff-драйверы
- .gitmodules, .mailmap, CODEOWNERS
- hooks/ - что это и как работает (pre-commit, commit-msg)
- SSH: асимметричная криптография на пальцах, почему лучше HTTPS для Git, keygen, ssh-agent, ~/.ssh/config для нескольких аккаунтов
Обязательно - стандартные файлы проекта:
- README.md - зачем, что должно быть внутри, что GitHub/GitLab рендерит автоматически
- CHANGELOG.md - формат Keep a Changelog, зачем вести
- LICENSE - обзор популярных лицензий (MIT, Apache 2.0, GPL), что будет если не указать
- CONTRIBUTING.md, CODE_OF_CONDUCT.md, SECURITY.md - что обязательно, что нет
- Базово про Markdown: синтаксис для README, таблицы, badges, ссылки на разделы
День 3. Базовые операции и культура коммитов
Обязательно:
- init, clone, add (в том числе -p), commit, status, log, diff - с полезными флагами
- Как писать хорошие коммит-месседжи:
- 7 правил (Chris Beams): длина заголовка, imperative mood, тело коммита
- Conventional Commits: feat/fix/chore/docs/refactor - стандарт, который читают и люди, и машины
- Что писать в теле: почему, а не что (что видно в diff)
- Антипаттерны: "fix", "wip", "update", "ну я поправил кое-что"
- Теги: lightweight vs annotated, семантическое версионирование (SemVer)
День 4. Ветвление и слияние
Обязательно:
- Ветки: что это на самом деле (просто указатель), создание, переключение, удаление
- merge: fast-forward vs three-way, когда что происходит
- Конфликты: как читать маркеры, как разрешать, mergetool в VS Code и IDEA
- rebase: что делает, золотое правило - не ребейзить публичные ветки
- merge vs rebase: один кейс, два пути, сравниваем что попало в историю
День 5. Работа с историей
Обязательно:
- log: --oneline, --graph, --author, --since, --grep, -S (pickaxe)
- diff: между коммитами, ветками, staged/unstaged
- blame: кто, когда - и как не превратить в охоту на ведьм
- reset (soft/mixed/hard): что сбрасывается, что нет
- restore vs checkout: в чём разница и почему появился restore
- revert: когда нельзя переписывать историю
- reflog: Git-машина времени, возвращаем "потерянные" коммиты и ветки
День 6. Переписывание истории
Обязательно:
- commit --amend: добавить файл, исправить сообщение
- stash: save, pop, apply, list, drop
- rebase -i: сквош, fixup, дроп, переупорядочивание, edit - разбор на практике
- cherry-pick: когда нужен (бэкпорт хотфикса), когда это симптом проблемы с процессом
Опционально:
- Удаление секретов из истории: filter-branch, BFG Repo Cleaner, git filter-repo
День 7. Удалённые репозитории и платформы
Обязательно:
- remote: add, fetch, pull, push - механика под капотом
- Tracking branches: что такое origin/main и как связано с локальной веткой
- Платформы: GitHub, GitLab, Gitea - сравнение
- Российские альтернативы: Forgejo, GitFlic
- Простой git-сервер: bare repo по SSH за 10 минут
Опционально:
- Монорепо vs много репо: trade-offs
- Сабмодули: зачем, как работают, типичные грабли
- worktree: несколько рабочих деревьев из одного репо, актуальность для AI-агентов
День 8. Git Flow и командные практики
Обязательно:
- Git Flow, GitHub Flow, Trunk-based Development - сравнение, когда что
- Pull Request / Merge Request: анатомия хорошего PR
- Code review: как давать фидбек, как не превратить в войну
- CI/CD и Git: как пайплайн запускается от события в репо (обзорно)
- GitOps как концепция: Git как единственный источник правды
Опционально:
- Поднимаем простейший GitHub Actions / GitLab CI пайплайн
- Нестандартные применения: Hugo + GitHub/Cloudflare Pages, блогинг через Git, документация через GitBook
День 9–10. Командный проект
Обязательно:
- Команды по 3–5 человек, псевдопроект
- Обязательные элементы: ветвление по выбранному флоу, PR с описанием, код-ревью, разрешение конфликтов
- Намеренно создаём сложные ситуации - студенты разруливают сами
- День 10: разбор проектов, ретроспектива, типичные ошибки
Модуль +1 (опциональный, бонусный)
Git через код: работаем с репозиторием из Python
- Зачем это нужно: автоматизация, скрипты деплоя, анализ истории
- GitPython: клонирование, коммиты, работа с ветками, diff через API
- Практика: пишем скрипт, который выводит авторов и статистику коммитов за последний месяц