Вопрос или проблема
Я хочу создать центральный репозиторий на сервере, куда пользователи смогут отправлять, забирать и делать коммиты, но я хочу применить некоторые ограничения: разработчик сможет добавлять (перемещать в индекс staging), но не коммитить, а рецензент сможет проверять код и, если он приемлем, делать коммит. Возможно ли это сделать с помощью самого Git или какого-либо другого ПО?
Git прекрасно подходит для получения кода по push. Тем не менее, большинство разработчиков получает лучший опыт работы с удаленными репозиториями, которые имеют какое-то вспомогательное программное обеспечение для создания запросов на слияние и другие нестандартные вещи, такие как Github, Bitbucket и Gitlab (в произвольном порядке). Если вы настаиваете на использовании только компьютера с git в качестве удаленного репозитория, вам нужно включить доступ по SSH на указанном удаленном репозитории. (также откройте порт 22 на файрволе вашего роутера).
Ответ или решение
Управление доступом пользователей в центральном репозитории Git
Создание центрального репозитория Git на сервере — задача, требующая внимательного подхода к управлению доступом пользователей. В описанной вами ситуации необходимо предоставить возможность разработчикам добавлять изменения в индекс, но без возможности коммита, тогда как рецензенты должны иметь возможность просматривать и коммитить эти изменения. Давайте разберемся, как можно добиться желаемого поведения.
Использование системы контроля версий Git
Git сам по себе не предоставляет детализированных механизмов для управления правами пользователей на уровне добавления в индекс (staging) и коммита. Однако, существуют способы и инструменты, которые помогут вам реализовать вашу идею:
-
Создание локальных клонов репозитория:
- Каждый разработчик получает собственный клон репозитория. В этом клоне они могут вносить изменения, делать коммиты и вызывать команды для добавления в индекс.
- Перед отправкой изменений в центральный репозиторий разработчики могут использовать такие команды, как
git add
иgit commit
, чтобы подготовить изменения. Затем они могут либо создать Pull Requests (если используется система на базе Git, поддерживающая PR), либо отправить изменения другим способом.
-
Использование Pull Requests:
- Платформы, такие как GitHub, GitLab или Bitbucket, позволяют настроить рабочий процесс с использованием Pull Requests. Разработчики могут делать коммиты в своих ветках и отправлять Pull Requests на основную ветку.
- Рецензенты получают возможность просматривать изменения, оставлять комментарии и, в конечном счете, коммитить изменения в основную ветку только после одобрения. Это обеспечивает контроль над качеством кода и его интеграцией.
-
Использование хуков Git:
- Вы можете использовать хуки Git, такие как
pre-receive
илиupdate
, на уровне сервера, чтобы ограничить права пользователей. Например, можно настроить хуки для предотвращения коммитов в основную ветку непосредственно из сторонних репозиториев. Однако это требует больших усилий и знаний о том, как настроить хуки на сервере.
- Вы можете использовать хуки Git, такие как
Программное обеспечение
Если вы хотите следить за процессами разработки и получать уведомления о статусе изменений, рекомендуется рассмотреть дополнительные инструменты, которые могут помочь:
-
GitLab:
- GitLab позволяет настраивать доступ на уровне группы и проекта. Вы можете определить роли пользователей (разработчик, рецензент и т.д.) и настроить разрешения. Рецензенты могут просматривать и сливать изменения после их одобрения.
-
GitHub:
- Похожая функциональность, как и в GitLab, где вы можете ограничить доступ к определенным действиям, таким как коммит в защищенные ветки.
-
Bitbucket:
- Поддерживает аналогичные функции управления доступом, включая защиту веток и систему Pull Requests.
Заключение
Хотя Git сам по себе не предоставляет прямых методов для ограничения коммитов на уровне пользователя, использование сторонних инструментов управления проектами и системы контроля версий, таких как GitLab, GitHub и Bitbucket, позволяет реализовать требуемую функциональность. Хуки Git могут быть применены для дополнительного уровня контроля, однако их настройка требует глубоких знаний.
Таким образом, вам стоит рассмотреть особенности и требования вашего проекта, и выбрать инструмент, который лучше всего соответствует вашим нуждам.