2010-05-17 20 views
6
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不能让bob看到状态,因为它需要读取的文件属于我。如何设置权限,以便两个用户可以在同一个hg存储库上工作?

因此,我更改权限以允许bob读取文件,并且一切都很好,直到我下一次尝试做某件事情,从而将情况逆转。现在他拥有该文件,我无法阅读它。

所以我建立了一个“提交者”组,并且john和bob都属于这个组,但是只要有一个提交或其他提交,它仍然具有所有权和权限的mercurial fiddles。

此外,无论何时我们中的一个人或其他人向存储库添加文件,文件都由提交者独占。这对我来说很好,因为我对chmod非常熟悉,但是当我忽视授予他许可时,它会出现一个重要的问题。我想我们只需要一个post-commit钩子;但只是包括这种症状...

我们如何配置它,使同一组中的两个不同的登录可以通过ssh提交到同一个存储库?

回答

1

长期粘性位解决方案也无法正常工作。

工作原理是将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 
3

使用unix组:请参阅文件系统方法here

13

您需要在所有相关目录中设置“组粘滞位”。该权限位表示,在这些目录中创建的任何文件或目录都应具有父目录组的所有权,而不是创建用户的主组。

您可以右键转到你的整个回购(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

您只需执行一次操作,如果在创建回购前执行此操作,则根本不需要使用查找,因为粘性组位将被所有目录继承。 CVS和svn在过去的日子里都是这样做的。

+1

你说得对。秘密就在于它的粘性......“chmod g + s .hg .hg/store .hg/store/data”似乎让事情变得“如此之好”。 – 2010-05-18 01:48:23

+0

是的,这将修复添加的任何新文件。其余的东西只是为了修复已经创建的文件。 – 2010-05-18 13:32:40

相关问题