我已根据此处描述的文档配置了我的hg存储库: MultipleCommitters
但是,当我执行“hg update -C”以在本地重新创建工作副本时,文件权限已更改,以便在其他开发人员尝试提交更改时最终导致推送错误。顺便提一下,如果配置正确,hg update将保留文件权限。但它似乎没有这样做:
-rwxrwxr-x 1 root mercurial 2948 2010-06-24 15:27 .hg/store/data/src/public/index.php.i
VS。 (实际源文件,删除工作副本并使用“hg update -C”重新创建)
-rw-r--r-- 1 root mercurial 820 2010-06-28 12:07 src/public/index.php
如何配置mercurial,以便在用户创建新文件或修改现有文件时,保留组及其权限?
更新
2010.06.28
以下是我看到的错误示例:
remote: resolving manifests
remote: getting src/configs/application.ini
remote: abort: Permission denied: /hg/repo/path/src/configs/application.ini
remote: warning: changegroup hook exited with status 255
remote: calling hook changegroup.notify: hgext.notify.hook
答案 0 :(得分:2)
我遇到了同样的问题,并通过在远程repo目录上设置粘滞位来解决它。
chmod + s`find。 -type d`
这将解决OP遇到的问题。
答案 1 :(得分:1)
您使用过哪种方法?详细说明您的设置。
是的,mercurial会记住提交时的文件权限。执行hg update -C
时,它将重新创建具有上次提交时设置的权限的文件。
您的错误消息似乎告诉存储库服务器上的存储库文件具有错误的权限/所有者,因此您无法使用hg push修改它们。这可能是因为有人将文件作为不同的存储库服务器用户提交和推送。
我建议使用共享ssh方法(https://www.mercurial-scm.org/wiki/SharedSSH):为存储库管理设置单独的用户帐户,添加开发人员的ssh公钥(您应该将它们限制为仅与mercurial一起使用特定存储库)然后使用ssh://hguser@server/path/to/repository
作为网址。
BTW:默认情况下,如果用户执行push / pull的用户不在受信任列表中,则mercurial不会运行任何挂钩。请参阅man hgrc
中的受信任部分。
BTW2:不要以root身份运行任何常规软件。使用普通帐户。