Как установить разрешения, чтобы два пользователя могли работать в одном репозитории hg? - PullRequest
7 голосов
/ 17 мая 2010
Ubuntu: Jaunty  
Mercurial: 1.3.1  
Access: ssh  (users john and bob)  
File permission:   -rw-rw----  1 john john  129276 May 17 13:28 dirstate  
User: bob  
Command: 'hg st'  
Response:  

**abort: Permission denied: /our/respository/.hg/dirstate**

Очевидно, что mercurial не может позволить бобу увидеть состояние, потому что файл, который ему нужно прочитать, принадлежит мне.

Так что я изменяю права доступа, чтобы позволить Бобу читать файл, и все в порядке, пока я не попытаюсь что-то сделать, откуда ситуация обратная. Теперь он владеет файлом, а я не могу его прочитать.

Итак, я создал группу «коммиттеров», и Джон и Боб принадлежат к этой группе, но все равно меркуриальные скрипки с правами владения и правами, когда тот или иной коммит фиксируется.

Кроме того, всякий раз, когда один или другой из нас добавляет файл в хранилище, файл принадлежит исключительно коммиттеру. Это хорошо для меня, так как я достаточно хорошо знаком с chmod, но это представляет большую проблему для Боба, когда я не даю ему разрешение. Я думаю, что для этого нам просто нужен пост-коммитный хук; но просто включить этот симптом ...

Как мы можем настроить его так, чтобы два разных имени входа в одной группе могли фиксировать в одном и том же хранилище через ssh?

Ответы [ 3 ]

14 голосов
/ 17 мая 2010

Вам необходимо установить «групповой бит» для всех соответствующих каталогов. Этот бит разрешений говорит о том, что любой файл или каталог, созданный в этих каталогах, должен иметь групповое владение группой родительского каталога, а не основной группой пользователя-создателя.

Вы можете все исправить, перейдя на верхний уровень всего репо (hg root) и выполнив следующие команды:

chgrp -R committers .
chmod -R ug+=rwX .
find . -type d -print0 | xargs -0 chmod 2775   # or 2770 if other can't read

Эта первая команда возвращает владельцу группы значение committers для всех файлов и каталогов. Вторая команда гарантирует, что владельцы и члены группы могут читать и записывать все файлы и каталоги и что они могут спускаться по всем каталогам. Третья команда перечисляет только каталоги (без файлов), а затем устанавливает бит группы флешки на них. После того, как вы закончите, разрешения для каталогов будут выглядеть так: rwxrwsr-x

Вы должны сделать это только один раз, и если вы делаете это до создания репо, вам вообще не нужно использовать find, поскольку бит липкой группы будет наследоваться всеми каталогами. Это было сделано так же для CVS и SVN в былые времена.

3 голосов
/ 17 мая 2010

с использованием групп Unix: см. Метод файловой системы здесь .

1 голос
/ 25 ноября 2010

Долгосрочное решение с липким битом тоже не сработало.

То, что сработало, это помещает команды chmod / chgrp в скрипт bash и учит дизайнера, как его запускать.

#!/bin/bash
chgrp -R foo /foo/development/templates
chgrp -R foo /foo/development/media
chgrp -R foo /foo/development/static

chmod -R g+w /foo/development/templates
chmod -R g+w /foo/development/media
chmod -R g+w /foo/development/static
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...