使用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
有没有办法解决这个问题?
答案 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。在此之后,您可以将转储文件加载到存储库中,然后在需要的地方镜像它。