在Subversion中删除僵尸锁

时间:2010-02-26 18:15:41

标签: svn sharpsvn

我正在尝试使用Subversion命令行工具找到一种删除僵尸锁的方法。最终的目标是从钩子脚本执行此操作,但是当您只有物理存储库路径时,我无法计算出要使用的命令行。 (使用svnadmin rmlocks似乎只适用于HEAD修订版中存在的锁。)

理想情况下,我想通过使用命令行工具的post-commit钩子脚本来完成此操作。 (我知道用于此目的的python脚本,但我们不希望在该服务器上安装python用于此次使用。)我们是.NET商店,因此使用SharpSVN库创建工具也是一个可能性,但唯一的解锁功能似乎是在SVNClient类中。

所以这真的有两个问题:有没有办法用命令行工具做到这一点?如果没有,有没有办法从SharpSVN做到这一点? (或许是另一个图书馆?)

== 2012年12月3日更新==

我最近不得不重新审视这个问题并发现这个问题仍然在吸引流量。原始问题中提到的python脚本和Don的答案后来转移到:http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/remove-zombie-locks.py(我认为这是大多数人都在寻找的。)

具有讽刺意味的是,即使存储库已移至Linux,我们仍在使用C解决方案。

4 个答案:

答案 0 :(得分:3)

有一个Python脚本(此处引用:http://subversion.tigris.org/ds/viewMessage.do?dsForumId=1065&dsMessageId=2369399)。我要么使用它,要么在需要时将其翻译成.NET。

答案 1 :(得分:1)

看起来答案是“你不能从这里到达那里。”

  • Svnadmin提供了一个用于删除具有存储库路径的锁的命令行,但它似乎不适用于僵尸锁。
  • SharpSVN主要是客户端;它确实有一些连接存储库路径的方法,但那些(根据文档)主要用于库的单元测试。

所以使用Subversion API库在C中重写python脚本。

答案 2 :(得分:1)

如果您知道已僵尸锁定的已删除文件的存储库路径,它是如此简单,一开始我简直不敢相信:

svn unlock --force https://path/to/my/file

即使删除的文件(根据定义)在存储库的头部中不存在,此操作也有效。无需钉钉修订,也不允许。仅当锁定来自其他用户时,force选项才是必需的。

答案 3 :(得分:0)

僵尸锁的常见问题是,svn阻止删除目录,直到从所有文件及其下的子文件夹中删除锁为止。假设您要从svn存储库“ svn://192.168.0.1/trunk/codes”中删除名为codes的文件夹。 您可以通过以下方式使用命令行工具svn来完成文件夹的删除。 svn rm -m“不是必需的” svn://192.168.0.1/trunk/codes 现在,svn会以类似svn的错误响应:警告:W160040:路径'/trunk/codes/abc.txt上没有锁 然后,您可以通过以下命令解锁此不存在的abc.txt svn unlock --force svn://192.168.0.1/trunk/codes/abc.txt(请参阅svn路径的使用,而不是本地路径) 如果不再存在锁定的未退出文件,则使用下一个命令删除该文件夹,即。 svn rm -m“不是必需的” svn://192.168.0.1/trunk/codes成功。