Подтвердить что ты не робот

Как настроить репозиторий git, где разные пользователи могут видеть только определенные части?

Как вы устанавливаете репозиторий git, где некоторые пользователи могут видеть определенные части исходного кода, а другие пользователи могут видеть все это? Я видел множество руководств только для того, чтобы предоставить определенным пользователям возможность доступа, но они предполагают, что каждый должен иметь доступ на чтение. Я также слышал о гитоциде, но я не уверен, что он поддерживает это, и у него не было никаких попыток в течение года, поэтому я думаю, что он мертв.

4b9b3361

Ответ 1

Короче: вы не можете. Git основан на снимок (на уровне концептуального уровня), но не на основе набора изменений. Он рассматривает проект (репозиторий) в целом. История - это история проекта, а не объединение однофайловых историй (это больше, чем объединение истории из одного файла).

Используя крючки, такие как update-paranoid hook in contrib, или механизм VREF, вы можете разрешить или запретить доступ к репозиторию, вы могут разрешать или запрещать доступ к отдельным ветким. Вы даже можете запретить любые коммиты, которые меняют вещи в указанном подкаталоге. Но проект всегда рассматривается как целое.

Ну, есть одна вещь, которую вы можете сделать: создать каталог, который вы хотите ограничить доступом к подмодулю, и ограничить доступ к этому репозиторию подмодуля.

Ответ 2

Git не поддерживает контроль доступа в репозитории. Однако вы можете реализовать управление доступом в репозитории самостоятельно, используя hooks, а точнее update.

Ответ 3

Jörg уже указал, что вы можете использовать крючки для этого. Точно, какой крюк (-ы) вам нужен, зависит от вашей настройки. Если вы хотите получить разрешения на репо, к которому нужно нажать, вам понадобится крюк update, как он сказал. Однако, если на репо, в котором вы фактически работаете (совершение и слияние), вам также понадобятся крючки pre-commit и post-merge. githooks manpage (Jörg также относится к этому) отмечает, что на самом деле script в разделе вкладка демонстрирует способ сделать это. Вы можете получить это, захватив tar2 git или вытащить его из git gitweb repo: setgitperms.perl. Даже если вы используете только крюк обновления, это может быть полезной моделью.

Ответ 4

Нативный git протокол не поддерживает это; git предполагает, что во многих местах у всех есть полная копия всей истории.

Тем не менее, одним из вариантов может быть использование git-subtree, чтобы отделить часть репозитория в своем собственном репозитории подмножества и периодически слейте назад.