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

Mercurial 如何设置权限以便两个用户可以在同一个hg存储库上工作?,mercurial,Mercurial,显然mercurial不能让bob看到状态,因为它需要读取的文件属于我 因此,我更改了权限,允许bob读取文件,一切都很好,直到我下一次尝试执行某项操作时,情况正好相反。现在他拥有这个文件,我看不懂 因此,我建立了一个“committers”组,john和bob都属于该组,但mercurial仍然会在一个或另一个提交时摆弄所有权和权限 此外,每当我们中的一方或另一方将文件添加到存储库中时,该文件将由提交者独占。这对我来说很好,因为我对chmod已经足够熟悉了,但当我忽视给予鲍勃许可时,这给他带来

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

因此,我更改了权限,允许bob读取文件,一切都很好,直到我下一次尝试执行某项操作时,情况正好相反。现在他拥有这个文件,我看不懂

因此,我建立了一个“committers”组,john和bob都属于该组,但mercurial仍然会在一个或另一个提交时摆弄所有权和权限

此外,每当我们中的一方或另一方将文件添加到存储库中时,该文件将由提交者独占。这对我来说很好,因为我对chmod已经足够熟悉了,但当我忽视给予鲍勃许可时,这给他带来了一个大问题。我想我们只是需要一个post-commit钩子;但就包括这个症状


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

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

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

您可以通过转到整个repo的顶层(
hg root
)并运行以下命令来纠正问题:

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**
第一个命令将所有文件和目录的组所有权返回给提交者。第二个命令确保所有者和组成员可以读取和写入所有文件和目录,并且可以删除所有目录。第三个命令只列出目录(忽略文件),然后在目录上设置stick group位。完成后,目录的权限将如下所示:
rwxrwsr-x


您只需执行一次,如果在创建回购之前执行,则根本不需要使用find,因为粘性组位将由所有目录继承。在过去,CVS和svn也是这样做的。

长期来看,粘性钻头解决方案也不起作用

有效的方法是将chmod/chgrp命令放入bash脚本中,并教设计者如何运行它

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

你说得对。秘密是有点粘。。。“chmod g+s.hg.hg/store.hg/store/data”似乎让事情“迄今为止都很好”。是的,这将修复添加的任何新文件。剩下的只是修复已经创建的文件。你能把最后一句话写成
find吗-d型-print0 | xargs-0 chmod g+s
?我真的很讨厌八进制,我认为它应该作为一个UI概念消亡
#!/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