【问题标题】:How to set permissions so two users can work on the same hg repository?如何设置权限以便两个用户可以在同一个 hg 存储库上工作?
【发布时间】:2010-11-25 11:38:54
【问题描述】:
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 带来了一个主要问题。我想我们只需要一个提交后挂钩;但只是为了包括这种症状......

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

【问题讨论】:

    标签: mercurial


    【解决方案1】:

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

    您可以通过转到整个 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 也是如此。

    【讨论】:

    • 你是对的。秘诀是粘性位......“chmod g+s .hg .hg/store .hg/store/data”似乎让事情变得“那么好”。
    • 是的,这将修复添加的任何新文件。剩下的就是修复已经创建的文件。
    • 你能把最后一条语句写成find . -type d -print0 | xargs -0 chmod g+s吗?我真的很讨厌八进制,我认为它应该作为 UI 概念消亡
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      从长远来看,粘位解决方案也不起作用。

      有效的方法是将 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
      

      【讨论】:

        猜你喜欢
        • 2010-09-14
        • 1970-01-01
        • 1970-01-01
        • 2021-03-30
        • 2021-11-04
        • 1970-01-01
        • 1970-01-01
        • 2017-06-15
        • 2018-12-11
        相关资源
        最近更新 更多