【发布时间】:2010-05-21 12:44:30
【问题描述】:
我正在使用颠覆作为 RCS。总是当我的项目的新版本完成时,我会创建它的标签(主干的副本)。 有谁知道我如何保护这个标记目录不被意外修改?
目前,作为一种解决方法,我锁定了所有文件。但是这个门槛意味着拥有锁的用户可以编辑文件。
有没有更好的解决方案?
【问题讨论】:
标签: svn configuration-management version-control rcs
我正在使用颠覆作为 RCS。总是当我的项目的新版本完成时,我会创建它的标签(主干的副本)。 有谁知道我如何保护这个标记目录不被意外修改?
目前,作为一种解决方法,我锁定了所有文件。但是这个门槛意味着拥有锁的用户可以编辑文件。
有没有更好的解决方案?
【问题讨论】:
标签: svn configuration-management version-control rcs
您可以使用预提交挂钩来防止用户在创建tags 目录后对其进行写入。
有关示例,请参阅此相关 SO 问题:
SVN pre-commit hook for avoiding changes to tags subdirectories
【讨论】:
您可以使用path-based authorization 授予标签目录的只读权限。
【讨论】:
tags。如果某些用户被授予写入权限,则总是有可能错误地修改标签内的文件。
如果您为标记中的所有文件设置svn:needs-lock 属性,则所有文件都将被检出为只读,除非用户明确获取锁定。这将(在大多数情况下)防止文件被更改。它不会阻止任何人更改只读标志或获取锁,但会减少意外修改的机会。
Subversion 本身不能将svn:needs-lock 属性应用于文件夹,但在 TortoiseSVN 客户端 (Windows) 中,如果您尝试这样做,它会将属性应用于文件夹和子文件夹中的所有文件。它不允许您从 TortioseSVN 存储库浏览器执行此操作,因此您必须签出标签的工作副本,修改属性,然后签入属性更改。其他客户可能会有所不同;如果您使用的是本机 subversion 命令行客户端,则可能需要合适的 shell 脚本或类似脚本来遍历文件和子文件夹以批量应用属性。如果您尝试更改 Tags 文件夹中的任何内容,TortoiseSVN 至少会警告您 - 但这只是一种约定,而不是强制执行。
svn:needs-lock 解决方案有点弱,很容易被绕过,并且不会阻止将新文件添加到标签文件夹中;一个更强大的替代方法是创建一个虚拟用户,并为该用户名中的整个标签获取锁。这将阻止“真正的”用户签入,并且工作副本签出将像svn:needs-lock 一样设置其只读属性 - 不同之处在于他们将无法获得锁,并且更改工作副本只读属性也将不允许签入。
【讨论】: