Есть ли смысл заставлять пользователя не изменять файл .gitignore. Я имею в виду, что кто-то изменит или удалит этот файл и подтолкнет эти изменения.
Запретить пользователю изменять файл .gitignore?
Ответы (3)
В Gitolite хуки pre-receive называются VREFS (Виртуальные ссылки, а также перечислено здесь): не устанавливайте хук перед получением непосредственно в репозиториях, управляемых gitolite, сделайте это, добавив VREF в каталог VREF
репозитория gitolite-admin
, и Gitolite распространит его на репо.
В разделе "ограничение отправки по каталогу/имени файла" показано, как ограничить отправку по именам каталогов и файлов, измененных.
Это один VREF, который вам не нужно добавлять в каталог VREF
на самом деле (это часть обработчика обновления, управляемого Gitolite. Для вторичного обработчика обновлений см. здесь).
Поэтому достаточно изменить gitolite.conf
в репозитории gitolite-admin
и отправить это административное репо на сервер gitolite.
repo foo
RW+ = @senior_devs
RW = @junior_devs
- VREF/NAME/Makefile = @junior_devs
Git децентрализован. После того, как кто-то клонировал репозиторий, он полностью находится под его контролем, включая файл .gitignore
.
Что вы можете сделать, так это запретить пользователям отправлять определенные файлы на ваш сервер с помощью Git hook, который проверяет указанные типы файлов и отказывает пользователю в отправке.
Ознакомьтесь с информацией об перехватчиках предварительного получения. И напишите скрипт, который ищет заданные типы файлов.
Проверьте свой репозиторий .git/hooks
, там будет список примеров файлов, которые покажут вам, как с этим справиться. Также прочитайте эту статью, чтобы избежать простой ошибки.
ИЗМЕНИТЬ
Я не очень хорошо разбираюсь в написании сценариев оболочки, но вот небольшой сценарий, который запрещает файлы .php и .css и сообщает пользователю перед прерыванием. Он находится в .git/hooks/pre-receive
. Не забудьте сделать его исполняемым (chmod +x
), иначе он не будет работать.
#!/bin/sh
while read oldrev newrev refname
do
if [[ `git diff-tree --no-commit-id --name-only -r $newrev | grep -e 'css\|php'` != "" ]]
do
echo "Cannot push this"
exit 1;
fi
end
Вы можете установить хук перед получением на стороне сервера и отказаться от отправки, если .gitignore
изменен.
chmod
для файлов рабочего каталога git, но на уровне репозитория git может не быть никакого способа сделать это. - person ConcurrentHashMap   schedule 13.02.2013