【问题标题】:prevent a user from performing "SVN update" on a locked files in tortoise svn防止用户对 Tortoise svn 中的锁定文件执行“SVN 更新”
【发布时间】:2013-12-10 08:17:07
【问题描述】:

有什么方法可以阻止用户对任何锁定的文件执行“SVN 更新”,或者至少向他们显示该文件被某人锁定的消息? 因为我们有一个基于 oracle forms & reports v5.0 的项目(我知道它已经很老了 :) )。众所周知,oracle 表单和报告以二进制格式存储其源文件。所以我们无法在发生冲突时比较两种形式。因此,通过阻止用户更新解决方案,他们知道有人正在处理这个项目,只是尝试处理其他项目,而不是整天在同一个项目上工作,而不能在一天结束时提交他们的更改(如果项目被锁定)或最终发生冲突而无法解决。或者至少在更新时收到某种通知,表明该项目已被锁定

附: 我正在使用 VisualSVN Server 2.7.3 和 TortoiseSVN 1.8.4。

【问题讨论】:

    标签: svn tortoisesvn visualsvn-server


    【解决方案1】:

    为什么要阻止用户更新他们的工作副本? (顺便说一句,您不会将 svn updatesvn commit 混淆吗?)描述并解释我们的案例和您的总体任务。

    如果文件被其他开发人员锁定,除了特定开发人员之外,没有人可以svn commit 更改此文件。换句话说,只有锁拥有者才能修改文件并提交它的更改(除非没有人打破/窃取锁)。

    另一方面,svn update 命令使用来自存储库的更新版本更新您的工作副本。该操作将更新存储库中某人锁定的文件。阻止用户更新其工作副本的唯一方法是在服务器端使用基于路径的授权规则来完全拒绝特定用户对存储库的访问。

    我建议阅读SVNBook | Locking 部分以获取有关 Apache Subversion 中锁定机制的更多信息。

    更新:

    参见SVNBook | Lock communication 部分。该部分涵盖了您描述的问题。

    1. 您可以使用svn:needs-lock 属性来指示Subversion 客户端在尝试修改它们之前必须锁定特定(或所有)文件。除非文件被锁定,否则它处于只读状态并且不能被修改。

      我看到你使用 VisualSVN Server 2.7 和 TortoiseSVN 1.8,它们都是基于 Subversion 1.8。 Subversion 1.8 客户端具有Repository Dictated Configuration。借助这项新功能,您可以使用新的 Subversion svn:auto-props 继承属性在存储库中配置自动属性模式。

      例如,如果您将存储库根目录(或代表项目根目录的存储库路径,主要取决于您的存储库结构)上的 svn:auto-props 值设置为 *.test = svn:needs-lock=* 属性,将导致每个新添加的*.test 应用了 svn:needs-lock=* 属性的文件。

      顺便说一句,TortoiseSVN 为应用了svn:needs-lock 属性的未锁定文件提供了特殊状态图标,请参阅TortoiseSVN manual

    2. 您可以在存储库中设置 post-lockpost-unlock 挂钩脚本。当有人锁定或解锁存储库中的文件时,这些钩子脚本可用于实现邮件通知。在SVNBook | Implementing Repository Hooks 中阅读有关 Subversion 挂钩脚本的更多信息。

    【讨论】:

    • @GhassanFarah 我会用对你有帮助的信息来更新我的答案。感谢您的澄清。 (顺便说一句,您可能希望将您的推荐作为对原始问题的更新)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-26
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多