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 看到状态,因为它需要读取的文件属于我。
因此,我更改了权限以允许 bob 读取文件,一切都很好,直到我下一次尝试做某事,情况才发生逆转。现在他拥有该文件,而我无法阅读。
所以我建立了一个“提交者”组,john 和 bob 都属于该组,但每当一个或其他提交时,所有权和权限仍然是善变的。
此外,每当我们中的一个或其他人将文件添加到存储库时,该文件都由提交者专有。这对我来说很好,因为我对 chmod 足够熟悉,但是当我忽略授予他权限时,它给 bob 带来了一个主要问题。我想我们只需要一个提交后 Hook ;但只是为了包括这个症状......
我们如何配置它,以便同一组中的两个不同登录可以通过 ssh 提交到同一个存储库?
最佳答案
您需要在所有相关目录上设置“组粘性位”。该权限位表示在这些目录中创建的任何文件或目录都应该拥有父目录组的组所有权,而不是创建用户的主组。
您可以通过转到整个 repo ( 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
对于所有文件和目录。第二个命令确保所有者和组成员可以读取和写入所有文件和目录,并且他们可以访问所有目录。第三个命令仅列出目录(省略文件),然后在它们上设置stick group 位。完成后,目录的权限将如下所示:rwxrwsr-x
您只需执行一次,如果您在创建 repo 之前执行此操作,则根本不需要使用 find,因为粘性组位将被所有目录继承。在过去,CVS 和 svn 也是如此。
关于mercurial - 如何设置权限以便两个用户可以在同一个 hg 存储库上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2846742/