Git GitHub Guide - moiaa/College_Management_System GitHub Wiki

🔧 Работа с Git и GitHub

Эта страница описывает, как 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-endpoints
  • gradebook-frontend/grades-table-ui
  • student-portal-frontend/login-page
  • admin-panel-backend/user-management-endpoints

Без этого при 14 параллельно работающих командах невозможно понять, чья это ветка и что она трогает — backend или frontend того же модуля.


🔁 Рабочий цикл на одну задачу

1. Обновите свою локальную копию main

Перед началом новой задачи всегда синхронизируйтесь с main — иначе рискуете потом разгребать конфликты с чужими изменениями:

git checkout main
git pull origin main

2. Создайте ветку под свою задачу

git checkout -b gradebook-backend/grade-crud-endpoints

3. Работайте и коммитьте небольшими порциями

git add core/models.py modules/gradebook/router.py
git commit -m "Добавить эндпоинт создания оценки"

(Frontend-команда того же модуля работает так же, только в своей ветке gradebook-frontend/... и коммитит файлы из frontend/gradebook/.)

Правила хороших коммитов:

  • Одно логическое изменение — один коммит (не «весь день работы одним коммитом»).
  • Сообщение — в повелительном наклонении, коротко: Добавить..., Исправить..., Убрать....
  • Не коммитьте файлы из .gitignore (venv/, .env, college.db, __pycache__/) — если Git предлагает добавить такой файл, значит .gitignore не подхватился или файл уже был закоммичен раньше по ошибке.

4. Отправьте ветку на GitHub

git push origin gradebook-backend/grade-crud-endpoints

5. Откройте Pull Request

На GitHub появится баннер Compare & pull request — нажмите его. В описании PR укажите:

  • Что сделано и зачем (коротко).
  • Какой Issue закрывает (Closes #12, если есть связанная задача).
  • Как проверить (например: pytest modules/gradebook/tests).

6. Дождитесь проверки CI и ревью

  • Внизу PR появятся статусы проверки (pytest, flake8) — оба должны быть зелёными. Если что-то красное, откройте лог и почините, затем запушьте исправление в ту же ветку — PR обновится сам.
  • Попросите кого-то из своей команды (или преподавателя) посмотреть код перед мерджем.

7. Мердж

После зелёного CI и одобрения — Merge pull request на GitHub. Ветку после мерджа можно удалить (GitHub предложит кнопку Delete branch).


🔀 Если main ушёл вперёд, пока вы работали

Если за время работы над задачей в 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 Что именно изменилось, но ещё не закоммичено

📚 См. также

⚠️ **GitHub.com Fallback** ⚠️