2012-02-10 31 views
5

我有一个Subversion存储库,是另一个远程存储库的镜像。我每周都使用svnsync镜像库。镜像存储库(本地副本)仅用于备份。Subversion - 是否可以禁用所有提交并使存储库只读?

我想将镜像存储库保留为READ-ONLY,即没有人应该能够对此存储库提交任何更改,但可以使用它读取源文件,因为它比远程存储库更快。

我在Google上看了一下,看起来Hook可能是最好的选择。唯一的问题是,我在Google上看到的所有示例都是基于Unix的,因为镜像存储库在Windows Server上运行,所以无法找到合适的Windows示例。

任何想法?

回答

5

为什么不在svnserve.conf中配置anon-access = read和auth-access = read?

+0

我刚刚尝试过,但它仍然允许提交 - 我取消注释文件/myrepository/conf/svnserve.conf中的两个属性 – ziggy 2012-02-10 13:36:26

+0

请记住,anon-access的默认值是读取的,因此注释它可以,但默认对于auth访问是写,所以你必须明确地设置它来读取。 – mac 2012-02-10 13:42:53

+0

是的,我试图改变auth访问只读,但我仍然可以提交。我正在使用Collabnet Subversion边缘。它有一个选项来限制通过GUI访问,但即时通讯猜测手动改变svnserve也应该工作。 – ziggy 2012-02-10 13:49:14

6

首先,您是否在结帐URL中使用了http://svn://

如果您使用的是svn://,则可以在存储库中配置svnserve.conf文件,以便通过简单地传递一个空文件来删除授权访问。匿名访问默认为“只读”,只要您没有更改svnserve.conf文件中的设置,您应该没问题。或者,您可以关闭匿名访问,并将授权访问权限更改为read-only

但是,如果您使用的是http://,则必须在您的Subversion服务器上配置Apache httpd配置,以禁止写入权限。

由于存在多种设置Apache httpd认证的方式,并且根据系统的不同,Apache httpd可以存储在多个位置,这会变得更加棘手。

另一种可能性是使用pre-commit hook来关闭对存储库的所有读写访问。

顺便说一下,旧的svnsync命令不仅要求svn读写访问提交它正在同步的更改,还必须具有pre-revprop-change挂钩设置,因此svnsync命令还可以修改svn:log,svn:datesvn:author属性以匹配原始存储库。这意味着,如果您设法使您的存储库只读,您可能会打破svnsync。您需要详细了解svnsync的工作原理以及是否仍然如此。我的pre-commit hook也可以解决这个问题。

相关问题