Как вы устанавливаете репозиторий git, где некоторые пользователи могут видеть определенные части исходного кода, а другие пользователи могут видеть все это? Я видел множество руководств только для того, чтобы предоставить определенным пользователям возможность доступа, но они предполагают, что каждый должен иметь доступ на чтение. Я также слышал о гитоциде, но я не уверен, что он поддерживает это, и у него не было никаких попыток в течение года, поэтому я думаю, что он мертв.
Как настроить репозиторий git, где разные пользователи могут видеть только определенные части?
Ответ 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, чтобы отделить часть репозитория в своем собственном репозитории подмножества и периодически слейте назад.