如何设置权限,以便两个用户可以在同一个hg存储库上工作?

Joh*_*Mee 7 mercurial

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**
Run Code Online (Sandbox Code Playgroud)

显然mercurial不能让bob看到状态因为它需要读取的文件属于我.

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

因此,我建立了一个"提交者"组,john和bob都属于该组,但无论何时提交或者其他提交,仍然可以使用所有权和权限.

此外,每当我们中的一个或另一个人将文件添加到存储库时,该文件仅由提交者拥有.我很好,因为我对chmod非常熟悉但是当我忽略了允许他的时候,这是一个很大的问题.我想我们只需要一个post-commit钩子; 但只是包括这个症状......

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

Ry4*_*ase 14

您需要在所有相关目录上设置"group sticky bit".该权限位表示在这些目录中创建的任何文件或目录应该具有父目录组的组所有权,而不是创建用户的主要组的组所有权.

你可以通过转到整个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
Run Code Online (Sandbox Code Playgroud)

第一个命令committers为所有文件和目录提供组所有权.第二个命令确保所有者和组成员可以读取和写入所有文件和目录,并且可以下载所有目录.第三个命令仅列出目录(省略文件),然后在其上设置棒组位.完成后,目录的权限将如下所示:rwxrwsr-x

您只需要执行一次,如果在创建repo之前执行此操作,则根本不需要使用find,因为粘性组位将由所有目录继承.在过去的日子里,CVS和svn的回归方式相同.