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