linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Главы
  • How it works
  • Уроки
  • База знаний
  • Собеседование
home/git/kb/Совместная работа/codeowners

kb/collab ── Совместная работа ── intermediate

CODEOWNERS

Файл `.github/CODEOWNERS` привязывает пути в репо к командам или людям. При открытии PR, который трогает эти пути, владельцы автоматически назначаются ревьюверами. В связке с branch protection блокирует merge без их approve.

view as markdownaka: code-owners, codeowners-file

CODEOWNERS - текстовый файл в репо, где каждая строка привязывает glob-паттерн пути к owner'у (команде или пользователю). Когда открывается PR, GitHub читает CODEOWNERS, смотрит изменённые файлы, и автоматически добавляет owner'ов в reviewers.

Расположение

Один из трёх путей, GitHub найдёт:

  • .github/CODEOWNERS (наиболее распространённый)
  • CODEOWNERS в корне
  • docs/CODEOWNERS

Хранить в .github/CODEOWNERS обычно удобнее: вся GitHub-специфичная конфигурация в одном месте.

Синтаксис

Похож на .gitignore, но вместо игнорирования - назначение owner'а:

# глобальный fallback
*           @acme/leads
# backend
/backend/   @acme/backend
/backend/db/migrations/   @acme/database
# frontend
/frontend/  @acme/frontend
*.tsx       @acme/frontend
# документация
*.md        @acme/docs
# один конкретный файл
/SECURITY.md  @alice @bob
# OR-логика: любой из перечисленных
/infra/     @acme/devops @acme/sre

Owner'ом может быть:

  • @username - конкретный пользователь
  • @org/team-name - команда внутри организации
  • email@example.com - валидный email связанный с GitHub-аккаунтом

Правило «последний выигрывает»

Если файл попадает под несколько правил, побеждает последнее совпадение. Поэтому общие правила пишут сверху, специфичные - снизу:

*               @acme/leads        # сначала общее
/backend/       @acme/backend      # потом backend
/backend/db/    @acme/database     # ещё специфичнее

Файл /backend/db/migration/0042.py принадлежит @acme/database, не @acme/backend - потому что /backend/db/ определён позже и более специфичен.

В связке с branch protection

Сам по себе CODEOWNERS только назначает reviewers. Чтобы заблокировать merge без их approve, в branch-protection нужна галка «Require review from Code Owners». Тогда:

  1. PR трогает /backend/db/.
  2. Назначается @acme/database.
  3. Merge заблокирован до approve от кого-то из этой team.

Подводные камни

  • Team должна иметь access к репо. Если ты упомянул @acme/database в CODEOWNERS, но команда не добавлена в Settings -> Manage access - GitHub пропустит назначение.
  • Owner не равно автор кода. CODEOWNERS - кто отвечает сейчас, не кто написал. Для авторства смотри blame.
  • CODEOWNERS не выдаёт права. Если owner не имеет write-доступа к репо, его approve не считается. Сначала выдать доступ (через team или прямой grant), потом CODEOWNERS.
  • Без Require review from Code Owners в branch protection CODEOWNERS - только подсказка о reviewers, не блокирующая.

§ команды

bash
git log --format='%an' -- /path/to/file

Узнать, кто чаще всех менял файл - кандидаты в owner'ы

§ см. также

  • branch-protectionBranch protection rulesНабор правил, которые GitHub/GitLab/Bitbucket применяет к попыткам изменить защищённую ветку. Запрещает прямой push, требует PR с approve, требует зелёный CI, блокирует force-push. Без них любой с write-доступом может затереть main одним коммитом.
  • pull-requestPull Request (PR)Запрос на влитие ветки в основную с прохождением ревью и CI. На GitHub/GitLab/Bitbucket - стандартный механизм совместной работы. Технически это не команда Git, а функция хостинга, надстроенная над веткой и серией коммитов.
  • code-reviewCode reviewЧтение и обсуждение кода другого разработчика перед merge. Главная цель - поделиться контекстом, а не найти баги (баги - побочный результат). Хороший ревью улучшает код и распространяет знание о системе по команде.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки