我在Subversion中有一个目录结构。
问题在于我生成了大量标签,现在需要限制其中的访问权限。
需要做一些通用的事情。
[Repo:/tags/**/folder]
developers =
Administrator = rw
问题是不起作用,开发人员继续获得许可。
有一条出路或者我必须为每个生成的标签进行配置吗?
答案 0 :(得分:3)
Subversion不支持基于路径授权的通配符。您需要限制在更高级别,或单独指定路径。
答案 1 :(得分:2)
问题在于我生成了大量标签,现在需要限制其中的访问权限。
两件事:
不要创建这么多标签。您始终可以将修订号用作标记,并且在许多站点中,这就是他们所做的。有人会说“我们是否对版本54220进行了代码审查?”使用修订号作为标记将使您无法创建这么多版本。如果您使用Jenkins之类的CI系统,则可以将构建号用作标记,因为它们指向特定的Subversion修订版。
您为什么要限制对代码的访问?是否突然出现了一些超级密码信息,这些信息在该标签上以前不是该标签的来源?您无法在svnaccess
文件中使用通配符。
我认为 真正的 问题是您有太多标签,而列出它们的用户需要很长时间。另外,如果你在/tags
下有2万个标签,很难找到你想要的标签。在这种情况下,只需删除不再需要的标签。
但是,这不意味着我们会丢失信息吗?如果我发现我需要那个标签怎么办?
Subversion不会永久删除任何内容。如果需要,您可以随时取回旧版本。假设你删除了一个旧标签:
$ svn delete http://repo/svn/tags/2.4
现在,您意识到出于某种奇怪的原因需要进行特定修订。也许在那个旧版本上还有一个客户。如何在删除后将其恢复?
首先,您可以找到删除的修订版本:
$ svn log -v http://repo/svn/tags
...
----------------------------------------------------------------------
r32394 | alroc | 2003-01-17 22:56:19 -0600 (Fri, 17 Jan 2003) | 1 line
Changed Paths:
D /tags/2.4
Deleted obsolete tag that's no longer needed
----------------------------------------------------------------------
有!它在修订版-r32394中被删除。这意味着在之前的Subversion修订版(32393)中,它仍然存在。让我们从版本32393中签出该标签:
$ svn checkout -r32393 http://repo/svn/tags/2.4@32393
全部完成。我们有旧的代码。如果您需要将该标记返回到存储库,请将其复制回/tags
:
$ svn copy -r32393 http://repo/svn/tags/2.4@32393 http://repo/svn/tags
现在,/tags/2.4
又回来了。
如果你真的,真的不喜欢删除标签,那么在某处创建一个标签存档目录,并将过时的标签移动到那里。这样,您就不会删除标记,但是当您执行svn ls http://repo/svn/tags
时,您最终不会看到它。
这样做的问题是如果你想进行转储和加载(例如,你将项目分离到另一个仓库),如果你不包括,那么svndumpfilter
就会搞砸了。存档标签。
最好的选择不是首先创造问题。只为版本创建标签,如果仍然觉得有太多标签,则删除标签。