我在Subversion中遇到版本控制问题。我从存储库检查了一个工作副本,并锁定了它的所有文件。然后,在没有释放锁的情况下,我从磁盘中删除了该文件夹。
如何打破驻留在存储库中的锁?我在Windows上使用TortoiseSVN。 是否有一个命令来递归锁定文件夹的锁?
答案 0 :(得分:56)
好的我明白了。这对我有用。
答案 1 :(得分:31)
执行SVN清理也会释放锁定:
$ svn cleanup
答案 2 :(得分:17)
$ 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'工具,你最好的选择似乎是:
svn checkout --ignore-externals *your_repo*
svn status --show-updates
以找出可能被锁定的文件(如果有人找到有关状态代码含义的文档,请发表评论)。svn unlock --force *some_file*
。我使用以下单行自动执行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