gitolite: разрешить изменять только выбранные файлы - PullRequest
6 голосов
/ 08 июля 2010

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

например, файлы в основной ветке origin:

/dir1/
/dir2/file1
/dir2/file2
/dir3/file1

Пользователь kathrine,разрешить изменять только /dir2/file1 и /dir2/file2

$kathrine: git clone git@example.com:test.git

приводит к:

/dir2/file1
/dir2/file2

Есть ли какие-либо директивы per-dir в gitolite.conf или я должен сконфигурировать git с новымветка для этого пользователя?

Я просто не хочу, чтобы графический дизайнер имел доступ к файлам исходного кода.

1 Ответ

4 голосов
/ 08 июля 2010

2010: для Gitolite 2 (возможно, изменился для Gitolite 3)

Нет (это означает, что необходимо создать выделенную ветку с нужным содержимым).

Как автор из самого gitolite: :

Я являюсь автором проекта под названием gitolite, который отлично справляется с управлением доступом на уровне филиала для нескольких репозиториев git на центральном сервере.Моя целевая «маркет» это именно корпоративные пользователи git.

До сих пор я не видел ситуации, когда доступ для чтения должен быть ограничен частями репо (git не может этого сделать в любом случае).

[хорошо редкая проверка может помочь, но в любом случае это нелегко)

Доступ на запись часто нужно ограничивать, и гитолитможет позволить вам ограничить:

  • как по имени ветви (например, только лидер QA может вставить серию фиксации в ветку "QA-done")
  • или по имени файла (например,Только руководитель группы может вносить изменения в Makefile и файлы в src/very-important-and-critical-module).

См. раздел " безопасность, контроль доступа и аудит ", и вот пример запись доступ:

Файл conf/example.conf имеет весь подробный синтаксис:

repo foo
        RW+ = lead_dev # rule 1
        RW = dev1 dev2 dev3 dev4 # rule 2

        RW NAME/ = lead_dev # rule 3
        RW NAME/doc/ = dev1 dev2 # rule 4
        RW NAME/src/ = dev1 dev2 dev3 dev4 # rule 5

каждый файл, к которому относится нажатие коммитов, проверяется на соответствие этим правилам.

  • lead_dev может отправлять изменения в любые файлы,
  • dev1 / 2 может отправлять изменения в файлы в «doc/» и «src/» (но не на верхнем уровне *)1055 *),
  • и dev3 / 4 могут вносить изменения только в файлы в "src/".

При этом остается сложным вопрос, как описывает ОП:

как создать новую ветку только с некоторыми выбранными файлами и удалить предыдущие коммиты, чтобы графический дизайнер не мог получить к ним доступ, а видеть только выбранные послеклон?

Общий принцип:

создать ветвь graph_designer в той точке истории, где эти файлы отсутствовали .

Оттуда, два варианта:

  • либо реорганизуют ваши текущие коммиты (git rebase --interactive), чтобы получить первый с только dir2 файлами(и затем фиксирует влияние на любой другой каталог)
  • или, если первый выбор представляет слишком много работы (или не представляется возможным, потому что эти коммиты уже были переданы и извлечены в других репозиториях), просто скопируйте и добавьтесоответствующие файлы в этой новой ветке.
    Это означает, что у этих файлов нет прошлой истории, но им может не понадобиться эта история с самого начала.

То, что 'graph_designer' будет единственной веткой, разрешенной для клонирования, и не будет содержать историю с несанкционированными файлами.

...