我的服务器安装了Subversion和Apache,Apache web目录也是Subversion工作副本。原因是简单命令svn update /server/staging
将最新的源部署到登台服务器。
Apache公共网站目录:/server/staging
- (这是SVN工作副本。)
我的服务器上有两个用户,'richard'和'austin'。他们都是'开发者'小组的成员。我递归地将/ server目录的权限设置为richard:开发人员,使用“sudo chown -R richard:developers / server”。
然后我为'richard'和'developers'组设置了读,写和执行权限。
当然,'austin'现在应该能够使用svn update /server/staging
命令吗?然而,当他尝试时,他得到错误:
svn: Can't open file '/server/staging/.svn/lock': Permission denied
如果我递归地将/ server的所有者更改为austin:开发人员,他可以正常运行命令,但是'richard'不能。
如何解决问题?我想创建一个提交后挂钩,以便在提交文件时自动部署登台站点,但我看不到这种方法可以为两个用户工作。钩子将是:
/usr/bin/svn update /server/staging
对它们使用相同的用户帐户实际上并不是一个可接受的解决方案,我不知道有什么方法可以在钩子内运行命令作为“root”。
感谢任何帮助!
答案 0 :(得分:8)
目录集组ID
如果设置了目录条目上的setgid位,则该目录中的文件将具有组所有权作为目录,而不是创建该文件的用户组。
当多个用户需要访问某些文件时,此属性很有用。如果用户在设置了setgid属性的目录中工作,则任何用户在目录中创建的任何文件都将具有该组的权限。例如,管理员可以创建一个名为spcprj的组,并将用户Kathy和Mark添加到组spcprj中。可以使用设置的GID位和Kathy和Mark创建目录spcprjdir,尽管在不同的主组中可以在目录中工作并且可以完全访问该目录中的所有文件,但仍然无法访问彼此主要组中的文件
以下命令将在目录上设置GID位:
chmod g+s spcprjdir
目录“spcprjdir”:
的目录列表drwxrwsr-x 2 kathy spcprj 1674 Sep 17 1999 spcprjdir
“s”代替组权限中的执行位会导致写入目录“spcprjdir”的所有文件属于“spcprj”组。
答案 1 :(得分:0)
我会使用svnserve
协议设置svn://
这是一个简单的Subversion服务器。您可以对其进行设置,使其在自己的用户帐户下运行,然后只有该用户才能访问该存储库。然后,该用户可以拥有在提交后挂钩上运行svn update /server/staging
的正确权限。
答案 2 :(得分:0)
您在authz文件中设置哪些用户具有哪种访问权限,每个用户或每个组。你在那里设置组,SVN组不是linux用户组(散列线是注释):
[groups]
# harry_and_sally = harry,sally
projectgroup = richard,austin
# [/foo/bar]
# harry = rw -- user harry has read/write access
# * = -- everybody have no access
# [repository:/baz/fuz]
# @harry_and_sally = rw -- harry_and_sally group members have read/write access
# * = r -- everyone has read access
[/server/staging]
@projectgroup = rw
* = r
解决此示例并设置配置。在'passwd'文件中设置用户密码。执行
cat passwd
你会得到一个评论文件,说明如何设置它。
答案 3 :(得分:0)
我使用WebDAV - 所有SVN更新和提交都是通过apache处理的,我从来没有遇到过这样的问题。