我在基于 CentOS 的服务器上托管了一个 Subversion 存储库。有几个团队需要访问存储库的不同部分。我想允许不同的用户查看存储库的不同部分,并隐藏其他部分。
我知道可以通过以下方式设置每个目录的权限基于路径规则,例如,我可以限制用户designer
对myrepo/myapp/media/images/
和 的读/写权限myrepo/myapp/core/css/
。但这意味着设计者必须使用这两个特定的 URL 来访问images
和css
文件夹。如果我没有授予他读权限,他就不能直接使用根 URL。
我希望他能够自由地浏览目录树,但只能看到他有权访问的文件夹及其父文件夹。
如果这是一个常规文件系统,我会使用bind --mount
命令在里面创建一组受限制的目录,/home/designer/
例如/home/designer/css
,/home/designer/images
等等。
可以在 SVN 仓库中做同样的事情吗?
至少,我可以创建第二个“虚拟”存储库,其中包含虚拟链接到主存储库中的真实文件夹的文件夹(例如)吗images
?css
答案1
是的,这是可能的,这是一个完美的用例SVN 外部组件
根据您的情况,可能是:
- 存储库中常规树之外的新物理文件夹
- 此 DESIGNER-ROOT 内的一些“逻辑”子文件夹,创建为指向真实文件夹的链接(在存储库内的任何其他位置,甚至在外部存储库中),并带有外部文件
DESIGNER-ROOT 的签出将把设计器 WC 中的所有外部数据作为真实树(存储库中不存在),提交会将所有数据传输到真实的外部源
但要小心:如果您在创建定义后更改(重命名、移动)外部源,这些更改将不会自动反映在定义中,您必须手动更正
答案2
没有什么可以真正阻止这种情况,但这是一个非常奇怪的情况,失败风险非常高。如果绑定挂载受到干扰,存储库将变得不一致。
这是否有效取决于存储库的访问方式。但是,这不是受支持的情况,并且它不是设计为可以工作的,您应该使用路径规则。
我认为如果您弄乱文件夹权限或进行绑定挂载,则可能会发生的情况是,SVN 签出对于受限用户来说将会失败,并且数据无论如何都会通过更改日志暴露。
如果这是我,我会将组件分成单独的存储库。