【问题标题】:Subversion: Write protection for tagged directoriesSubversion:标记目录的写保护
【发布时间】:2010-05-21 12:44:30
【问题描述】:

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

目前,作为一种解决方法,我锁定了所有文件。但是这个门槛意味着拥有锁的用户可以编辑文件。

有没有更好的解决方案?

【问题讨论】:

    标签: svn configuration-management version-control rcs


    【解决方案1】:

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

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

    【讨论】:

    • 预提交钩子是可以做更复杂事情的脚本,比如只允许某些用户更改标签目录。
    • 如果预提交挂钩是官方方式,我将在所有文件上设置 SVN 属性“svn:needs-lock”。
    • 不要在所有文件上设置属性...这与 SVN 的想法背道而驰。关于基于路径的授权给出的答案是正确的方法。
    【解决方案2】:

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

    【讨论】:

    • 这个解决方案的问题是你不能创建新的tags。如果某些用户被授予写入权限,则总是有可能错误地修改标签内的文件。
    • 您可以在创建标签后将标签设置为只读,使通常的 /tags 子目录可写:es: /myproject/tags 是可写的,而 /myproject/tags/my-first-tag 已设置在标签创建后只读。
    【解决方案3】:

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

    Subversion 本身不能将svn:needs-lock 属性应用于文件夹,但在 TortoiseSVN 客户端 (Windows) 中,如果您尝试这样做,它会将属性应用于文件夹和子文件夹中的所有文件。它不允许您从 TortioseSVN 存储库浏览器执行此操作,因此您必须签出标签的工作副本,修改属性,然后签入属性更改。其他客户可能会有所不同;如果您使用的是本机 subversion 命令行客户端,则可能需要合适的 shell 脚本或类似脚本来遍历文件和子文件夹以批量应用属性。如果您尝试更改 Tags 文件夹中的任何内容,TortoiseSVN 至少会警告您 - 但这只是一种约定,而不是强制执行。

    svn:needs-lock 解决方案有点弱,很容易被绕过,并且不会阻止将新文件添加到标签文件夹中;一个更强大的替代方法是创建一个虚拟用户,并为该用户名中的整个标签获取锁。这将阻止“真正的”用户签入,并且工作副本签出将像svn:needs-lock 一样设置其只读属性 - 不同之处在于他们将无法获得锁,并且更改工作副本只读属性也将不允许签入。

    【讨论】:

    • 我知道这个问题已经过时了,但我一直在寻找解决这个问题的方法并找到了这个问题。这个答案描述了我目前打算做什么,因为似乎没有直接支持。
    猜你喜欢
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 2015-08-15
    • 2014-02-25
    • 2011-11-26
    相关资源
    最近更新 更多