Git GitHub Guide - moiaa/College_Management_System GitHub Wiki
Эта страница описывает, как 14 команд (7 модулей × backend и frontend) работают в одном репозитории, не мешая друг другу.
Все команды работают в одном репозитории (не в форках). У каждой команды — свои ветки, но общий main. Никто не пишет напрямую в main — только через Pull Request (PR).
main ──●───────●───────●───────●──▶ (защищённая, только через PR)
\ \ \ \
● gradebook-backend/… ● gradebook-frontend/… ● schedule-backend/… ...
main должен всегда оставаться рабочим: на каждый push и PR туда автоматически гоняются pytest и flake8 (см. .github/workflows/ci.yml) — PR с падающими тестами или ошибками стиля мерджить нельзя.
Так как в репозитории одновременно работают 14 команд (на каждый модуль — backend- и frontend-команда), в префиксе ветки нужны и модуль, и роль:
<модуль>-<backend|frontend>/<короткое-описание-задачи>
Примеры:
gradebook-backend/grade-crud-endpointsgradebook-frontend/grades-table-uistudent-portal-frontend/login-pageadmin-panel-backend/user-management-endpoints
Без этого при 14 параллельно работающих командах невозможно понять, чья это ветка и что она трогает — backend или frontend того же модуля.
Перед началом новой задачи всегда синхронизируйтесь с main — иначе рискуете потом разгребать конфликты с чужими изменениями:
git checkout main
git pull origin maingit checkout -b gradebook-backend/grade-crud-endpointsgit add core/models.py modules/gradebook/router.py
git commit -m "Добавить эндпоинт создания оценки"(Frontend-команда того же модуля работает так же, только в своей ветке gradebook-frontend/... и коммитит файлы из frontend/gradebook/.)
Правила хороших коммитов:
- Одно логическое изменение — один коммит (не «весь день работы одним коммитом»).
- Сообщение — в повелительном наклонении, коротко:
Добавить...,Исправить...,Убрать.... - Не коммитьте файлы из
.gitignore(venv/,.env,college.db,__pycache__/) — если Git предлагает добавить такой файл, значит.gitignoreне подхватился или файл уже был закоммичен раньше по ошибке.
git push origin gradebook-backend/grade-crud-endpointsНа GitHub появится баннер Compare & pull request — нажмите его. В описании PR укажите:
- Что сделано и зачем (коротко).
- Какой Issue закрывает (
Closes #12, если есть связанная задача). - Как проверить (например:
pytest modules/gradebook/tests).
- Внизу PR появятся статусы проверки (
pytest,flake8) — оба должны быть зелёными. Если что-то красное, откройте лог и почините, затем запушьте исправление в ту же ветку — PR обновится сам. - Попросите кого-то из своей команды (или преподавателя) посмотреть код перед мерджем.
После зелёного CI и одобрения — Merge pull request на GitHub. Ветку после мерджа можно удалить (GitHub предложит кнопку Delete branch).
Если за время работы над задачей в main появились чужие изменения, подтяните их в свою ветку до открытия PR (или если CI показывает конфликт):
git checkout gradebook-backend/grade-crud-endpoints
git fetch origin
git merge origin/mainЕсли Git сообщает о конфликте — он пометит спорные места в файлах маркерами:
<<<<<<< HEAD
ваш код
=======
код из main
>>>>>>> origin/main
Откройте файл, вручную решите, какой вариант (или оба) оставить, уберите маркеры <<<<<<<, =======, >>>>>>>, затем:
git add <файл>
git commit
git push origin gradebook-backend/grade-crud-endpoints- Не пушьте напрямую в
main— только через PR. - Не используйте
git push --forceв общих ветках — это стирает чужую историю. - Не коммитьте
college.db,.env,venv/— для этого и существует.gitignore. - Не работайте несколько человек одновременно в одной ветке без координации — вы будете постоянно конфликтовать друг с другом.
- Не игнорируйте красный CI, пытаясь "домержить и там разберёмся" — сломанный
mainтормозит все остальные 13 команд. - Backend- и frontend-команда одного модуля не трогают файлы друг друга (
modules/<модуль>/иfrontend/<модуль>/соответственно) — если нужно что-то поменять на другой стороне (например, формат ответа API), договоритесь и обновите общее ТЗ модуля, а не правьте чужой код напрямую.
| Команда | Что делает |
|---|---|
git status |
Что изменено, что не закоммичено |
git checkout -b <ветка> |
Создать и переключиться на новую ветку |
git add <файл> |
Подготовить файл к коммиту |
git commit -m "..." |
Сохранить изменения с сообщением |
git push origin <ветка> |
Отправить ветку на GitHub |
git pull origin main |
Подтянуть свежий main
|
git log --oneline -10 |
Короткая история последних коммитов |
git diff |
Что именно изменилось, но ещё не закоммичено |
- 🚀 Начало работы — как выбрать модуль и назначить себя на задачу.
- 📥 Установка и настройка — локальное окружение.
- ❓ FAQ — частые проблемы.