Шаблон репозиторію курсу. Містить dev-контейнер з C++ toolchain, стартову структуру проєкту і окремі папки під кожну домашню роботу.
Основний спосіб користуватись цим репо - створити власну копію через кнопку Use this template на GitHub. Курс-репо залишається read-only для вас, PR-и на вашій копії йдуть у ваш main.
-
Створити власну копію через Use this template:
- Відкрити сторінку курс-репо на GitHub.
- Натиснути
Use this template->Create a new repository. - В Owner dropdown обрати свій акаунт, задати назву (наприклад
cpp-miltech), створити.
Це дає самостійне репо у вашому акаунті з чистою git-історією і без fork-зв'язку з курс-репо.
-
Склонувати власний репо і відкрити у VS Code:
Windows: клонувати всередині WSL (відкрити
wslу PowerShell), не наC:\. Dev Containers очікує POSIX-середовище (shell-скрипти,$HOME,$USER); на Windows host це не працює - VS Code падає на.devcontainer/scripts/initialize(error 193), а${localEnv:HOME}і${localEnv:USER}порожні. Деталі - у preps/windows.md.git clone https://github.com/<your-username>/cpp-miltech.git cd cpp-miltech code .
VS Code запропонує
Reopen in Container- погодитись. Перший запуск тягне і білдить Docker image (5-10 хв), наступні запуски миттєві. -
Зібрати весь репо всередині контейнера:
cmake -S . -B build -G Ninja cmake --build buildВиконувані файли домашніх робіт з'являться в
build/homework_XX/.
Додати обох лекторів як collaborators свого репо, щоб вони могли бачити код і робити review на pull request-ах:
Settings->Collaborators->Add people->yevhenkuznetsov, рольReadдостатня.Settings->Collaborators->Add people->farnblack, рольReadдостатня.
Без цього лектори не побачать приватний репо взагалі і не зможуть залишати formal review (approve / request changes) навіть на публічному.
Зміни в курс-репо не синкаються автоматично у локальний репо. Якщо щось важливе оновлюється - буде анонс у Slack-каналі курсу з інструкцією, що замінити вручну.
Чому не git merge / cherry-pick: курс-репо позначений як GitHub Template. Копія через "Use this template" - це новий репо з єдиним "Initial commit", без зв'язку з курс-репо в історії. Спільного предка нема, тому git нічого не може злити автоматично.
Чому Template, а не fork: fork залишає історію спільною, і merge для нього працював би. Але PR на fork-у GitHub дефолтно цілить у upstream (у курс-репо). Курс-репо має лишатися read-only, PR-и студентів - іти у їхні репо. Template це знімає, ціна - нема прямого git-sync.
git merge course/main падає з refusing to merge unrelated histories.
З --allow-unrelated-histories merge пройде, але вийде каша: дві
кореневі коміти і конфлікти на більшості файлів. Cherry-pick не падає
сам, але конфліктує на локально модифікованих файлах.
Простіше - ручна заміна файлів за Slack-анонсом. Без git-акробатики.
Потрібно:
- Docker Engine (рекомендовано на всіх платформах).
preps/містить інструкції: Linux напряму, macOS через Colima, Windows всередині WSL2. Docker Desktop теж працює, але потребує додаткових налаштувань (WSL2 integration, file sharing, ресурси), якіpreps/не покриває. - VS Code з розширенням
ms-vscode-remote.remote-containers(Dev Containers).
Покрокові інструкції під конкретну платформу:
Загальний огляд інструментів в preps/ - у preps/README.md.
.
├── .devcontainer/ # Docker image + конфіг dev-контейнера
├── .github/workflows/ # GitHub Actions: CI build через devcontainer
├── CHANGELOG.md # лог помітних змін по PR-ах
├── CMakeLists.txt # корневий CMakeLists, підтягує homework_XX через add_subdirectory
├── homework_XX/ # окрема домашка, кожна зі своїм CMakeLists.txt
└── preps/ # інструкції зі сетапу за платформами
Коли лектор анонсував нову ДЗ або ви починаєте роботу над уже анонсованою:
- Створити папку
homework_NN/з власнимCMakeLists.txt,src/,include/і даними якщо є. - Додати у корневий CMakeLists.txt рядок:
add_subdirectory(homework_NN)
- Комітити і пушити у свій репо. CI (якщо налаштований у вашому репо) перевірить що все збирається.
Workflow .github/workflows/build.yml запускається на кожен PR (і на push у
main). Він:
- Будує devcontainer image з Dockerfile.
- Виконує всередині
cmake -S . -B build -G Ninja && cmake --build build. - Падає якщо хоч одна
homework_XXне компілюється з тулчейном з devcontainer-а (gcc-13, clang-18, C++20).
Якщо CI червоний локально зібралося, але на CI ні - швидше за все devcontainer треба rebuild локально (Dev Containers: Rebuild Container), щоб підхопити свіжі версії тулів.