3

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

理想情况下,我想通过使用命令行工具的提交后挂钩脚本来做到这一点。(我知道用于此目的的 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

4 回答 4

3

有一个Python脚本(在此引用:http: //subversion.tigris.org/ds/viewMessage.do?dsForumId=1065& dsMessageId=2369399)。如果需要,我会使用它,或者将其转换为 .NET。

于 2010-02-26T23:31:41.463 回答
1

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

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

因此,使用 Subversion API 库在 C 中重写 python 脚本。

于 2010-04-05T14:40:58.763 回答
1

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

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

即使已删除的文件(根据定义)确实不存在于存储库的头部,这仍然有效。不需要也不允许修改挂钩。force仅当锁定来自其他用户时才需要该选项。

于 2018-07-19T13:58:21.113 回答
0

僵尸锁的常见问题是,svn 阻止删除目录,直到从所有文件及其下的子文件夹中删除锁为止。假设你想从你的 svn repo "svn://192.168.0.1/trunk/codes" 中删除一个名为 codes 的文件夹。您可以通过以下方式使用命令行工具 svn 来完成文件夹的删除。svn rm -m "not required" svn://192.168.0.1/trunk/codes 现在 svn 响应类似 svn 的错误:警告:W160040: No lock on path '/trunk/codes/abc.txt 你可以解锁这个非-existent abc.txt 通过以下命令 svn unlock --force svn://192.168.0.1/trunk/codes/abc.txt (请参阅使用 svn 路径而不是本地路径)如果不存在更多锁定的非存在文件,则下一步命令删除文件夹,即。svn rm -m "not required" svn://192.168.0.1/trunk/codes 是成功的。

于 2020-08-17T13:01:02.710 回答