Я использую репозиторий git с коллегой, и поскольку git не распространяет полную полноту разрешений на файлы Unix, у нас есть "hook", который выполняется при обновлении, которое устанавливает "другие" разрешения как они должны быть установлены. Проблема? Крючок использует chmod
, и получается, что когда мой коллега совершает файл, он владеет им, поэтому я не могу запустить chmod
на нем и наоборот. Каталоги все записываются на группы, липкие, поэтому я считаю, что любой из нас имеет право удалить любой файл и заменить его одним и тем же именем, одним и тем же содержимым, но с другим правом собственности. Предположительно тогда мы могли бы chmod
его. Но это похоже на ужасно большой молот, и я немного нагло накручиваю его. Итак, два вопроса:
-
Кто-нибудь может подумать о другом способе сделать это?
-
Если нет, то какой лучший дизайн для пуленепробиваемой оболочки script, которая реализует "сделать этот файл принадлежащим мне"? Нет перекрестной файловой системы и т.д. И т.д.
Для тех, кто, возможно, не понял, разрешение на запись не дает разрешения 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
не только для координации изменений, но и для публикации репо в качестве веб-сайта курса. Публикация веб-сайта является основной целью репо. Разрешения script запускаются при каждом обновлении с помощью git hook, и это гарантирует, что у студентов нет разрешения на чтение решений, которые еще не были представлены. -
Пожалуйста, не предлагайте, чтобы у меня был неправильный umask. Не все файлы в репо должны иметь одинаковые разрешения, и независимо от выбранного umask, необходимо будет изменить разрешения для некоторых файлов. Не говоря уже о том, что мне было бы неудобно налагать мои предпочтения umask на моих коллег.
-
ОБНОВЛЕНИЕ. Я только что узнал, что в нашей среде root отключен до
nobody
на всех машинах, к которым у нас есть доступ, так что решение, основанное на привилегиях root, выиграно работа.