Я делюсь репозиторием git с коллегой, и поскольку git не распространяет полный набор разрешений для файлов Unix, у нас есть «крючок», который запускается при обновлении и устанавливает «другие» разрешения по мере необходимости. Эта проблема? Хук использует chmod
, и получается, что когда мой коллега коммитит файл, он владеет им, поэтому я не могу запустить на нем chmod
, и наоборот. Все каталоги доступны для групповой записи, липкие, поэтому я считаю, что любой из нас имеет право удалить любой файл и заменить его файлом с тем же именем, тем же содержимым, но с другим владельцем. Предположительно, тогда мы могли бы chmod
это. Но это похоже на ужасно большой молот, и я немного опасаюсь его испортить. Итак, два вопроса:
Кто-нибудь может придумать другой способ сделать это?
Если нет, то какой лучший дизайн для пуленепробиваемого сценария оболочки, который реализует "сделать этот файл принадлежащим мне"? Никаких перемещений между файловыми системами и т. Д. И т. Д.
Для тех, кто, возможно, не понял, разрешение на запись не дает разрешения на chmod
:
% ls -l value.c
-rw-rw---- 1 agallant ta105 133 Feb 10 13:37 value.c
% [ -w value.c ] && echo writeable
writeable
% chmod o+r value.c
chmod: changing permissions of `value.c': Operation not permitted
Мы оба в группе ta105
.
Примечания:
Мы используем
git
не только для координации изменений, но и для публикации репозитория в качестве веб-сайта курса. Публикация веб-сайта является основной целью репозитория. Сценарий разрешений запускается при каждом обновлении с помощью git-хука и гарантирует, что у учащихся нет разрешения на чтение решений, которые еще не были обнародованы.Пожалуйста, не предполагайте, что у меня неправильный umask. Не все файлы в репозитории должны иметь одинаковые разрешения, и какой бы umask ни был выбран, разрешения для некоторых файлов необходимо будет изменить. Не говоря уже о том, что с моей стороны было бы невежливо навязывать коллегам свои умаски предпочтения.
ОБНОВЛЕНИЕ. Я только что узнал, что в нашей среде права root отменены до
nobody
на всех машинах, к которым у нас есть доступ, поэтому решение, основанное на привилегиях root, не будет работать.
drwxrwxr_x
или что-то в этом роде? Вы, вероятно, хотитеdrwxrwsr_x
. Ваши текущие разрешения каталога помогут уточнить. - person Amit Naidu   schedule 23.04.2013man 2 chmod
, вам нужно быть владельцем или суперпользователем, чтобы изменить права доступа к файлу. Разрешения родительского каталога не упоминаются и кажутся несущественными, поскольку разрешения хранятся в индексном узле, а не в каталоге (иначе две жесткие ссылки на один и тот же файл могут иметь разные разрешения). - person philh   schedule 17.12.2013