是否有任何方法可以阻止用户对任何锁定的文件执行“SVN 更新”,或者至少向他们显示该文件已被某人锁定的消息? 因为我们有一个基于 oracle forms & reports v5.0 的项目(我知道它很旧了:))。已知的 Oracle 表单和报告以二进制格式存储其源文件。所以当发生冲突时我们无法比较两种形式。因此,通过阻止用户更新解决方案,他们知道有人正在处理该项目,并尝试处理其他项目,而不是整天处理同一个项目,而无法在一天结束时提交更改(如果项目被锁定)或最终出现无法解决的冲突。或者至少在更新时有某种通知表明该项目已被锁定
附注 我正在使用 VisualSVN Server 2.7.3 和 TortoiseSVN 1.8.4。
最佳答案
为什么要阻止用户更新其工作副本? (顺便说一句,您是否将 svn update
与 svn commit
混淆了?)描述并解释我们的案例以及您的一般任务。
如果文件被另一位开发人员锁定,则除了特定开发人员之外,没有人可以svn commit
对此文件进行更改。换句话说,只有锁所有者才能修改文件并提交其更改(除非没有人破坏/窃取锁)。
另一方面,svn update
命令使用存储库中的较新版本更新您的工作副本。该操作将更新存储库中某人锁定的文件。阻止用户更新其工作副本的唯一方法是在服务器端使用基于路径的授权规则来完全拒绝特定用户对存储库的访问。
我建议阅读SVNBook | Locking有关 Apache Subversion 中锁定机制的更多信息,请参阅部分。
更新:
参见SVNBook | Lock communication部分。本节涵盖您所描述的问题。
您可以使用 svn:needs-lock 属性来指示 Subversion 客户端在尝试修改特定(或所有)文件之前必须锁定它们。除非文件被锁定,否则它处于只读状态并且无法修改。
我看到您使用的是VisualSVN Server 2.7和TortoiseSVN 1.8,它们都基于Subversion 1.8。 Subversion 1.8 客户端具有 Repository Dictated Configuration 。借助这项新功能,您可以使用新的 Subversion
svn:auto-props
继承属性在存储库中配置 auto-props 模式。例如,如果您将存储库根目录上的
svn:auto-props
值设置为*.test = svn:needs-lock=*
属性(或者代表项目根的存储库路径,它主要取决于您的存储库结构)将导致每个新添加的*.test
文件具有svn:needs-lock=*
应用属性(property)。顺便说一句,TortoiseSVN 对于应用了
svn:needs-lock
属性的未锁定文件有特殊的状态图标,请参阅 TortoiseSVN manual .您可以设置
post-lock
和post-unlock
存储库上的 Hook 脚本。当有人锁定或解锁存储库中的文件时,这些 Hook 脚本可用于实现邮件通知。在 SVNBook | Implementing Repository Hooks 中了解有关 Subversion Hook 脚本的更多信息。 .
关于svn - 防止用户对 tortoise svn 中的锁定文件执行 "SVN update",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20489277/