是否可以创建一个“虚拟” SVN 存储库,其自己的文件夹指向另一个存储库中的文件夹(如 FS 挂载)?

是否可以创建一个“虚拟” SVN 存储库,其自己的文件夹指向另一个存储库中的文件夹(如 FS 挂载)?

我在基于 CentOS 的服务器上托管了一个 Subversion 存储库。有几个团队需要访问存储库的不同部分。我想允许不同的用户查看存储库的不同部分,并隐藏其他部分。

我知道可以通过以下方式设置每个目录的权限基于路径规则,例如,我可以限制用户designermyrepo/myapp/media/images/和 的读/写权限myrepo/myapp/core/css/。但这意味着设计者必须使用这两个特定的 URL 来访问imagescss文件夹。如果我没有授予他读权限,他就不能直接使用根 URL。

我希望他能够自由地浏览目录树,但只能看到他有权访问的文件夹及其父文件夹。

如果这是一个常规文件系统,我会使用bind --mount命令在里面创建一组受限制的目录,/home/designer/例如/home/designer/css/home/designer/images等等。

可以在 SVN 仓库中做同样的事情吗?

至少,我可以创建第二个“虚拟”存储库,其中包含虚拟链接到主存储库中的真实文件夹的文件夹(例如)吗imagescss

答案1

是的,这是可能的,这是一个完美的用例SVN 外部组件

根据您的情况,可能是:

  • 存储库中常规树之外的新物理文件夹
  • 此 DESIGNER-ROOT 内的一些“逻辑”子文件夹,创建为指向真实文件夹的链接(在存储库内的任何其他位置,甚至在外部存储库中),并带有外部文件

DESIGNER-ROOT 的签出将把设计器 WC 中的所有外部数据作为真实树(存储库中不存在),提交会将所有数据传输到真实的外部源

但要小心:如果您在创建定义后更改(重命名、移动)外部源,这些更改将不会自动反映在定义中,您必须手动更正

答案2

没有什么可以真正阻止这种情况,但这是一个非常奇怪的情况,失败风险非常高。如果绑定挂载受到干扰,存储库将变得不一致。

这是否有效取决于存储库的访问方式。但是,这不是受支持的情况,并且它不是设计为可以工作的,您应该使用路径规则。

我认为如果您弄乱文件夹权限或进行绑定挂载,则可能会发生的情况是,SVN 签出对于受限用户来说将会失败,并且数据无论如何都会通过更改日志暴露。

如果这是我,我会将组件分成单独的存储库。

相关内容