如何递归地释放Subversion中的锁?

时间:2010-07-01 05:18:15

标签: version-control locking svn

我在Subversion中遇到版本控制问题。我从存储库检查了一个工作副本,并锁定了它的所有文件。然后,在没有释放锁的情况下,我从磁盘中删除了该文件夹。

  • 我无法从存储库中删除该文件夹,因为它有一个锁
  • 如果I并尝试递归释放锁,则表示没有锁被释放。
  • 在“浏览存储库”视图中,我只能打破特定的锁,而不是递归地打开文件夹。

如何打破驻留在存储库中的锁?我在Windows上使用TortoiseSVN。 是否有一个命令来递归锁定文件夹的锁?

9 个答案:

答案 0 :(得分:56)

好的我明白了。这对我有用。

  • 查看一个 工作副本
  • 然后进入Windows资源管理器菜单, TortoiseSVN - >检查 修改...
  • 点击Check repository button
  • 选择所有文件,右键单击和 选择休息锁定选项
  • 删除工作副本和副本 在存储库中。瞧! :)

答案 1 :(得分:31)

执行SVN清理也会释放锁定:

$ svn cleanup

答案 2 :(得分:17)

来自advance locking section

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

这仅表示文件未锁定在当前工作目录中 ,但如果它仍然锁定在存储库级别,则可以强制解锁(“打破锁定”)

$ 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所做的)

答案 3 :(得分:6)

如果其他人远程锁定了文件,我发现使用TortoiseSVN 1.7.11执行以下操作已成功解锁了我的工作副本。 (类似于vikkun的回答)

  • 右键单击工作副本>检查修改
  • 单击“检查存储库按钮”
  • 选择您要解锁的文件
  • 右键单击>获取锁定
  • 选中“窃取锁定”复选框
  • 锁定被盗后,再次选择
  • 右键单击>释放锁定

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

答案 4 :(得分:3)

除非您拥有svn计算机的管理员权限,否则可以使用' svnadmin'工具,你最好的选择似乎是:

  1. 使用svn checkout --ignore-externals *your_repo*
  2. 查看有问题的目录
  3. 在已签出的存储库中使用svn status --show-updates以找出可能被锁定的文件(如果有人找到有关状态代码含义的文档,请发表评论)。
  4. 对2中的文件使用svn unlock --force *some_file*
  5. 我使用以下单行自动执行2.和3.:

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

答案 5 :(得分:2)

存储库管理员可以删除锁定(递归),对有问题的目录中的数百个文件进行操作 - 但只能通过脚本编写,因为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

此解决方案适用于包含空格的文件名。

答案 6 :(得分:2)

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

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

答案 7 :(得分:0)

对于我删除.svn中的锁定文件无法正常工作,因为我在尝试更新文件后收到错误的校验和消息。

在目录中执行svn cleanup之后我得到了以下msg:

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

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

答案 8 :(得分:0)

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

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

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