Запретить пользователю изменять файл .gitignore?

Есть ли смысл заставлять пользователя не изменять файл .gitignore. Я имею в виду, что кто-то изменит или удалит этот файл и подтолкнет эти изменения.


person Marceli Po    schedule 13.02.2013    source источник
comment
Если вы говорите на уровне локальной файловой системы, может быть способ установить chmod для файлов рабочего каталога git, но на уровне репозитория git может не быть никакого способа сделать это.   -  person ConcurrentHashMap    schedule 13.02.2013
comment
Ну, я использую gitolite для управления доступом к репозиториям.   -  person Marceli Po    schedule 13.02.2013
comment
Я бы не рекомендовал хуки, когда вы управляете репозиториями с помощью Gitolite. Смотрите мой ответ.   -  person VonC    schedule 13.02.2013


Ответы (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
person VonC    schedule 13.02.2013
comment
Это довольно круто, и это работает как шарм: P Большое спасибо. У меня также есть еще один вопрос, немного не по теме. Можете ли вы посоветовать мне хороший рабочий процесс с использованием GIT с командой контроля качества и рецензентом кода в среде с серверами разработки, тестирования, подготовки и производства? - person Marceli Po; 15.02.2013
comment
@MarceliPo Git-flow является текущим стандартом и является хорошей отправной точкой (stackoverflow.com/a/12927985/6309) - person VonC; 15.02.2013
comment
@MarceliPo, если это ответ на ваш вопрос, можете ли вы пометить его как правильный ответ, чтобы другие посетители знали, а VonC получил надлежащую атрибуцию? :) - person Swivel; 10.10.2013

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
person Jørgen R    schedule 13.02.2013

Вы можете установить хук перед получением на стороне сервера и отказаться от отправки, если .gitignore изменен.

person CharlesB    schedule 13.02.2013