有没有办法在锁定该文件之前强制更新 SVN 文件?

Posted

技术标签:

【中文标题】有没有办法在锁定该文件之前强制更新 SVN 文件?【英文标题】:Is there a way to force an SVN file update before locking that file? 【发布时间】:2021-11-26 20:12:27 【问题描述】:

问题: SVN 中有没有办法在二进制文件被锁定时强制更新文件?通过强制锁定操作在编辑之前将文件更新到最新版本,这似乎可以解决我们在下面遇到的问题。

背景: 作为电气工程师,我在工作中使用 SVN (TortoiseSVN) 进行修订控制。我们在 SVN 中拥有的许多文件都是二进制设计文件,如果发生冲突则无法合并。在这些二进制设计文件中,我们设置了“svn:needs-lock”属性。

问题: 我们遇到过一些案例,其中两名工程师(工程师 A 和工程师 B)有一个二进制文件(文件 1)在同一修订版(修订版 1000)中检出。 Eng A 锁定 File 1,进行编辑,然后提交 File 1,这意味着 Eng A 现在拥有 Revision 1001 的 File 1。

现在 Eng B 想要对文件 1 进行编辑。但是,即使 SVN 存储库中的最新更改是 Revision 1001,他仍在使用 Revision 1000。Eng B 锁定文件 1,进行编辑,然后提交他的更改现在是修订版 1002。

这里的问题是,当 Eng B 做出提交时,他的编辑不是基于 Eng A 在 Revision 1001 的更改,而是基于他“过时”的 Revision 1000。这导致 Eng A 在 Revision 1001 的更改被删除.

【问题讨论】:

【参考方案1】:

不幸的是,在大多数用例中,仅使用 svn:needs-lock 属性是行不通的。这是因为 svn 会尝试使用文件系统级别的权限来使文件只读。然后由二进制文件的应用程序通知用户文件是否处于只读状态。但是大多数现代应用程序只是简单地删除只读标签并开始覆盖。你可以阅读更多关于为什么它没有以硬方式实现的信息here。这里的信息显示了锁定策略的“更软”的颠覆方法。

我曾尝试使用pre-lockpost-lock 挂钩脚本实施更严格的锁定策略。但是从管理的角度来看,维护变得太耗时了。

pre-lockpost-lock 通知对于至少较小的团队 (10-15) 而言,在没有管理员头疼的情况下产生了奇迹。 每当有人锁定路径时,就会向组中的人发送通知,通知该文件已使用锁定路径的用户的名称锁定,提醒用户不要锁定它们或更新它们。 当锁被释放时,会向组发送另一个通知,通知该锁可以使用。

这种非常简单的锁定和解锁通信将工作覆盖率降低到几乎为 0。仍有一些新人刚开始工作,没有检查文件是否被锁定。

【讨论】:

以上是关于有没有办法在锁定该文件之前强制更新 SVN 文件?的主要内容,如果未能解决你的问题,请参考以下文章

SVN提交强制写入注释及相关扩展阅读

如何打开锁定的 mdb 文件?

SVN解锁的几种解决办法

201207:SVN提示文件被锁定不能更新-啥是k8s

SVN强制解锁操作

SVN被锁定的几种解决方法