2013-02-13 4 views
3

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

+0

Если вы говорите на местном уровне файловой системы, может быть способ, чтобы установить 'chmod' на файлы в рабочем каталоге мерзавца, но и на уровне хранилища мерзавец, не может быть каким-либо образом сделать что. – ConcurrentHashMap

+0

Ну, я использую гитолит для управления доступом к репозиториям. –

+0

Я бы не рекомендовал крючки, когда вы управляете репозиториями с Gitolite. См. Мой ответ. – VonC

ответ

2

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

3

Git децентрализован. Когда кто-то клонирует репо, он полностью находится под их контролем, включая файл .gitignore.

Что вы делаете может do не позволяет пользователям нажимать определенные файлы на ваш сервер с помощью Git hook, который проверяет указанные типы файлов и отказывает пользователю нажать.

Читайте также: pre-receive hooks. И напишите сценарий, который ищет данные типы файлов.

Проверьте свой репо .git/hooks, будет список образцов файлов, которые покажут вам, как с ним обращаться. Также прочитайте this article, чтобы избежать легкой ошибки.

EDIT

Я не годится на языке сценариев командной оболочки, но вот небольшой скрипт, который запрещает .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 
4

С , предварительно получают Крючки называются VREFS (Virtual Refs, также listed here): не установка предварительно получить крючок непосредственно в операции РЕПО, управляемых gitolite, сделать это путем добавления VREF в каталоге VREF от gitolite-admin репо, а Гитолит будет распространять его на репозитории.

В разделе «restricting pushes by dir/file name» показано, как ограничить нажатие на имена файлов и файлов.
Это один VREF, который вам не нужно добавлять в каталог VREF, на самом деле (он является частью крючка обновления, управляемого Gitolite. Для дополнительного обновления, see here).

Таким образом, модификация gitolite.conf в репозитории gitolite-admin и отбрасывание того, что админ-репо на сервер gitolite достаточно.

repo foo 
     RW+        = @senior_devs 
     RW        = @junior_devs 

     - VREF/NAME/Makefile   = @junior_devs 
+0

Это довольно круто, и он работает как шарм: P Thx очень много. У меня также есть еще один вопрос, который может немного отличаться от темы. Можете ли вы посоветовать мне хороший рабочий процесс с использованием GIT с командой QA и обзором кода в среде с серверами разработки, тестирования, постановки и производства? –

+0

@MarceliPo git-flow является текущим стандартом и является хорошей отправной точкой (http://stackoverflow.com/a/12927985/6309) – VonC

+0

@MarceliPo. Если бы это ответили на ваш вопрос, можете ли вы пометить его как правильный ответьте, чтобы другие посетители узнали, и VonC получит надлежащую атрибуцию? :) – Swivel