gitolite: позвольте изменять только selelected файлы

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

например, файлы в ведущем ответвлении источника:

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

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

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

результаты в:

/dir2/file1
/dir2/file2

Есть ли любые директивы на dir в gitolite.conf или я настрою мерзавца с новым ответвлением для этого пользователя?

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

6
задан takeshin 8 July 2010 в 14:55
поделиться

1 ответ

2010:

Для Gitolite 2 (возможно, изменилось для gitolite 3)

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

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

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

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

[ну sparse checkout может помочь, но это всё равно нелегко)

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

  • как по имени ветки (например, только QA lead может засунуть серию коммитов в ветку "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/" (но не в верхний уровень README),
  • а dev3/4 может вносить изменения только в файлы в "src/".

Учитывая это, остаётся сложный вопрос, как выразился ОП:

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

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

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

Отсюда два варианта:

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

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

4
ответ дан 17 December 2019 в 06:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: