我正在尝试使用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解决方案。
答案 0 :(得分:3)
有一个Python脚本(此处引用:http://subversion.tigris.org/ds/viewMessage.do?dsForumId=1065&dsMessageId=2369399)。我要么使用它,要么在需要时将其翻译成.NET。
答案 1 :(得分:1)
看起来答案是“你不能从这里到达那里。”
所以使用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成功。