Subversion:为标记目录写保护

时间:2010-05-21 12:44:30

标签: svn configuration-management version-control rcs

我使用subversion作为RCS。总是当我的项目的新版本被完成时,我创建它的标签(主干的副本)。 有谁知道如何保护这个标记的目录不被意外修改?

目前作为解决方法我锁定所有文件。但是这个窗台意味着拥有锁的用户可以编辑文件。

有没有更好的解决方案?

3 个答案:

答案 0 :(得分:5)

您可以使用预提交挂钩来防止用户在创建后写入tags目录。

有关示例,请参阅此相关SO问题:
SVN pre-commit hook for avoiding changes to tags subdirectories

答案 1 :(得分:2)

您可以使用path-based authorization为标记目录授予只读权限。

答案 2 :(得分:0)

如果为标记中的所有文件设置svn:needs-lock属性,则除非用户明确获取锁定,否则所有文件都将以只读方式签出。这将(在大多数情况下)阻止文件被更改。它不会阻止任何人更改只读标志或获取锁定,但它可以减少意外修改的可能性。

Subversion本身不能将svn:needs-lock属性应用于文件夹,但是在TortoiseSVN客户端(Windows)中,例如,如果您尝试这样做,它会将该属性应用于文件夹和子文件夹中的所有文件。它不允许您从TortioseSVN repo-browser执行此操作,因此您必须签出标记的工作副本,修改属性,然后检查属性更改。其他客户可能有所不同如果您使用的是本机subversion命令行客户端,则可能需要使用合适的shell脚本或类似脚本来迭代文件和子文件夹以批量应用该属性。如果你试图改变Tags文件夹中的任何内容,TortoiseSVN至少会警告你 - 但这只是一个惯例,而不是强制执行。

svn:needs-lock解决方案有点弱并且容易规避,并且不会阻止新文件添加到标记文件夹;更强的替代方法是创建一个虚拟用户,并获取该用户名中整个标记的锁定。这将阻止“真实”用户办理登机手续,而工作复制结帐将设置其只读属性,就像使用svn:needs-lock一样 - 区别在于他们无法获得锁定,并且更改工作副本只读属性也不允许签入。