svnsync - 无法锁定目标存储库

时间:2010-11-02 12:27:26

标签: svn svnsync

使用svnsync

$ svnsync --non-interactive sync ${REPO}

在进程中止后出现此错误消息并重试

Failed to get lock on destination repos, currently held by 'svn.test.com:0e4e0d98-631d-0410-9a00-9330a90920b3'  
...  
Failed to get lock on destination repos, currently held by 'svn.test.com:0e4e0d98-631d-0410-9a00-9330a90920b3'   
svnsync: Couldn't get lock on destination repos after 10 attempts  

有没有办法解决这个问题?

6 个答案:

答案 0 :(得分:57)

实际上,svnsync中内置了一些可以“窃取”锁定的功能。

svnsync help sync

所示:

--steal-lock             : Steal locks as necessary.  Use, with caution,
                           if your mirror repository contains stale locks
                           and is not being concurrently accessed by another
                           svnsync instance.

当我运行它时,我得到了一个很好的:

Stole lock previously held by '[hostname]'

所以,毕竟你不需要propdel的东西

答案 1 :(得分:53)

您必须通过远程站点上的svn命令行删除远程存储库上的lock属性,该命令行在同步过程中因故障而遗留。

svn propdel --revprop -r0 svn:sync-lock file:///path/to/the/repository

答案 2 :(得分:10)

从技术上讲,您需要从目标存储库中删除该属性,而不一定是远程存储库,因为目标可能是本地的。所以对于这个具体问题:

svn propdel --revprop -r0 svn:sync-lock ${REPO}

答案 3 :(得分:3)

删除Lock对我有用。但是,我必须使用稍微不同的命令,因为我需要发送用于解锁帐户的帐户的用户名和密码。

svn pdel --revprop -r 0 --username ??? --password ??? svn:sync-lock file:///path/to/the/repository

我还必须从存储库所在的驱动器运行此命令。 (在运行命令之前,在命令提示符中更改为d:如果我的存储库位于d:)

在输入用户名和密码之前,当我运行命令时出现以下错误:

revprop change blocked by pre-revprop-change hook (exit code 255)

我找到并打开了pre-revprop-change挂钩文件,其中包含的代码只列出了可以进行必要更改的特定用户名。在上面的命令中使用该用户名和密码删除了钩子。

答案 4 :(得分:3)

要确认是否存在锁定(尽管错误显然告诉它),请使用-verbose运行proplist

svn pl --revprop -v -r 0 file:///svn/slave

然后根据需要删除道具!

答案 5 :(得分:2)

你必须做两件事才能解决问题。一个是如上所述删除锁。然后,您必须将pre-revprop-change.tmpl文件编辑为空,并使其可执行。在Linux / Unix / Mac上使用chmod + x,但在Windows上将文件名更改为pre-revprop-change.bat。在此之后,您可以将转储文件加载到存储库中,然后在需要的地方镜像它。