提问人:stil_e 提问时间:9/28/2022 最后编辑:bahrepstil_e 更新时间:10/12/2022 访问量:68
对具有不同权限的多个用户帐户使用工作副本
Using working copy with multiple user accounts with different permissions
问:
我使用 VisualSVN 服务器和一个有 3 个用户的存储库,并使用 TortoiseSVN 作为客户端。两个用户具有完全访问权限,并且正在提交所有更改。第三个用户用于公共(公司共享云端硬盘,非完全公共)只读签出文件夹。身份验证是 VisualSVN Server 的基本身份验证。 结构如下:
\
\branches
\tags
\trunk
\trunk\internal
内部文件夹设置为第三个公共用户无访问权限。其他真实用户没有主动使用 SVN,而只是访问共享驱动器上这个签出的 \trunk 文件夹。提交后,此签出文件夹会自动使用挂钩进行更新。
如果使用公共用户名和密码更新了该签出文件夹,则不会显示内部文件夹。这就是它应该如何工作。
如果我不小心用我的用户名和密码更新了这个文件夹,而我的用户名和密码对内部文件夹具有读/写权限,则会显示这个内部文件夹。这也是正确的。
此更新后,我意识到错误并想使用公共用户名和密码更新文件夹,但内部文件夹不会从工作副本中删除/删除。这是 100% 不行的。如果我仅使用公共用户名专门更新内部文件夹,则会出现禁止更新的错误。这也没关系,但文件夹仍然存在。如果我删除内部文件夹并使用公共用户名更新工作副本,则内部文件夹将恢复。这真的不行。
到目前为止,我所知道的是,这与权限有关。例如:
- 公共用户提交文件
- 我删除了服务器上公共用户对此文件的访问权限
- 公共用户更新工作副本,并正确移除/删除此文件
- 如果我使用其他用户名更新,则会显示该文件
- 如果我使用公共用户再次更新,则文件不会被移除/删除
那么,哪个应用程序无法正常工作?我排除了 TortoiseSVN,因为当我通过 cmd 更新时也会发生同样的事情。这样就剩下 SVN 和 VisualSVN 服务器了。
P.S. 从理论上讲,我可以将内部文件夹移到主干之外,因为在共享驱动器上只签出主干,但我想为这种情况找到解决方案。
答:
AFAIK,这就是 Subversion 客户端的设计工作方式,通常不被视为问题。该行为由 Subversion 客户端控制,而不是由服务器控制。
为什么不让用户拥有自己的工作副本呢?或者至少不要使用用户凭据更新工作副本。仅将挂钩脚本中指定的凭据用于该工作副本。
如果需要,可以将数据保留在网络共享上,但隐藏具有共享用户权限的 .svn 元数据目录。或者使用而不是工作复制,并仅从钩子脚本更新它。
svn export
您可以将项目的布局移动到子目录中。但将 /internal 目录保留在存储库的根目录中。签出新项目目录的工作副本。目录 /internal 不会出现在共享工作副本中,即使您在更新时不小心使用了不需要的凭据也是如此。
当用户对目录或文件没有读取或读取/写入权限时,他将无法在存储库中看到此文件或目录,并且用户无法从服务器和存储库下载它。唯一的例外是用户的本地工作副本,该副本在用户具有读取权限时签出或更新。但这基本上与用户在具有足够访问权限时将文件下载到磁盘的情况相同。假设您有一个网络共享,并且用户对此共享上的文件具有读取访问权限。他将此文件下载到他的磁盘上。然后,您撤消他对此文件的访问权限。此操作不会从用户的磁盘中删除该文件,但会阻止用户更新此文件或再次下载该文件。
在本地删除工作副本中的 /internal 目录不会将其从 .svn 元数据目录中删除。因此,更新工作副本将再次从 .svn 目录的原始区域恢复文件。
PS 您也可以在 users@ Apache Subversion 邮件列表中提交功能请求或提出使用问题。
评论
svn export
svn export
svn update
评论