我怎样才能释放锁在Subversionrecursion?

我在Subversion中有版本控制问题。 我从存储库中检出了一个工作副本,并locking了所有的文件。 然后,不释放锁,我已经从磁盘删除该文件夹。

  • 我无法从存储库中删除文件夹,因为它有一个锁
  • 如果我试图recursion地释放这个锁,它说没有锁被释放。
  • 在“浏览存储库”视图中,我只能recursion地打破特定的文件夹,而不是文件夹。

我如何打破驻留在存储库中的锁? 我在Windows上使用TortoiseSVN。 有一个命令为文件夹recursion地打破locking?

好,我知道了。

  • 我所做的是我检出了一份工作副本。
  • 然后进入资源pipe理器菜单,TortoiseSVN – >检查修改…
  • 点击检查存储库button
  • select所有文件,右键单击并select中断locking选项。
  • 删除工作副本和存储库中的工作副本。 瞧! 🙂

问候

做一个SVN清理也将释放locking:

$ svn cleanup 

从提前locking部分

 $ svn status -u M 23 bar.c MO 32 raisin.jpg * 72 foo.h Status against revision: 105 $ svn unlock raisin.jpg svn: 'raisin.jpg' is not locked in this working copy 

这仅仅意味着文件没有被locking在你当前的工作目录中,但是如果它仍然被locking在版本库级别,你可以强制解锁(“解锁”)

 $ svn unlock http://svn.example.com/repos/project/raisin.jpg svn: Unlock request failed: 403 Forbidden (http://svn.example.com) $ svn unlock --force http://svn.example.com/repos/project/raisin.jpg 'raisin.jpg' unlocked. 

(这是你通过TortoiseSVN GUI所做的)

如果其他人已经远程locking了文件,我发现使用TortoiseSVN 1.7.11在我的工作副本中成功地解锁了它们。 (类似vikkun的回答)

  • 右键单击工作副本>检查修改
  • 点击检查存储库button
  • select您想要解锁的文件
  • 右键单击>获取locking
  • 选中“窃取locking”checkbox
  • 锁被盗后,再次select
  • 右键单击>释放locking

工作副本中的文件现在应该被解锁。

如果您有权访问repo服务器中的svnadmin工具,则可以使用此替代方法删除所有锁(基于VonC发布的脚本)

 svnadmin lslocks <path_to_repo> |grep -B2 Owner |grep Path |sed "s/Path: \///" | xargs svnadmin rmlocks <path_to_repo> 

存储库pipe理员可以删除锁(recursion),在一个有问题的目录内的数百个文件上操作 – 但只能通过脚本,因为svnadmin rmlocks没有–recursive选项。

 $repopath=/var/svn/repos/myproject/; $problemdirectory=trunk/bikeshed/ IFS=$'\n'; for f in $(sudo svnadmin lslocks $repopath $problemdirectory \ | grep 'Path: ' \ | sed "s/Path: \///") ; \ do sudo svnadmin rmlocks $repopath "$f" ; done 

该解决scheme适用于文件名中有空格的文件名。

除非你有pipe理员访问svn机器,并且可以使用'svnadmin'工具,否则你的最佳select似乎是这样的:

  1. 使用svn checkout --ignore-externals *your_repo*有问题的目录svn checkout --ignore-externals *your_repo*
  2. 在检出的版本库上使用svn status --show-updates来找出哪些文件可能被locking(如果有人发现关于状态码含义的文档请注释)。
  3. 在2处find的文件上使用svn unlock --force *some_file*

我用下面的一行来自动化2.和3

 svn status -u | head -n -1 | awk '{ print $3 }' | xargs svn unlock --force 

对我来说,删除.svn文件中的locking文件不起作用,因为我在更新文件后得到了错误的校验和msg。

在目录中执行svn cleanup后,我得到了以下消息:

svn:在目录''svn:不能复制'.svn / tmp / text-base / file_name.svn-base'到'filename.3.tmp':没有这样的文件或目录

所以我将我的文件复制到.svn / tmp / text-base,并将其名称更改为file_name.svn-base。 然后清理和更新工作正常。

当我尝试从最初提供的脚本上面运行脚本时,我试图设置variables时出现错误:./scriptname:line1:= / svn / repo / path /:没有这样的文件或目录./scriptname: line2:=目录/:没有这样的文件或目录

我从前两行中删除了'$',这之后就完美了。

 repopath=/var/svn/repos/myproject/; problemdirectory=trunk/bikeshed/ IFS=$'\n'; for f in $(sudo svnadmin lslocks $repopath $problemdirectory \ | grep 'Path: ' \ | sed "s/Path: \///") ; \ do sudo svnadmin rmlocks $repopath "$f" ; done