Сначала поймите, что здесь нет магии .Mercurial всегда создает файлы как пользователь, с которым он работает, конец истории.Он не пытается (и даже не имеет разрешения) делать что-либо еще.
Это означает, что если вы запускаете hg только через sudo и права существующих файлов правильные, он БУДЕТ делать то, чтоВы хотите здесь.
Но это также означает, что если пользователи запускают hg без sudo и у них есть необходимые разрешения, они БУДУТ запутаться.Mercurial позволяет вам делать то, что разрешено моделью разрешений Unix.
Существует три подхода к решению этой проблемы:
- хлопать костяшками рулетки до тех пор, пока люди не будут последовательно использовать sudo
- использует оболочку типа mercurial-server, которая объединяет всех пользователей в одну учетную запись
- правильно настраивает группу, umask, владения и разрешения, чтобы на самом деле можно было обмениваться
Последнее работает следующим образом:
- убедитесь, что у каждого пользователя X есть соответствующая группа по умолчанию X (большинство современных систем уже делают это)
- добавьте всех (и wwwdata) в дополнительныйgroup project-foo
- убедитесь, что для всех пользователей установлен umask при входе в систему НЕ маскировать чтение / запись группы (umask 007, а не 077)
- установить все файлы в проекте для включения в групповой проект foo(chgrp -R project-foo foo /)
- сделать все файлы доступными для чтения / записи этой группой (chmod -R g + rw foo /)
- сделать все каталоги доступными и setgid (найти еoo / -типа d |xargs chmod g + sx)
Это гарантирует, что каждый раз, когда пользователь создает файл в проекте, он будет доступен для чтения / записи для всех остальных в группе.