SVN 版本库同步 从目标版本库获得锁失败

在使用svn进行版本库同步的过程中,因为意外的原因终止了某次同步,此时如果再进行下一次同步,则会提示以下错误:


从目标版本库获得锁失败,当前被“adt-8c676d570cf:8a23d087-3aeb-5a41-b6ec-8a7024a4ce73”持有
..........
svnsync: Couldn't get lock on destination repos after 10 attempts




问题的细节情况:
我在网络上挂载了一个SVN版本库,这个版本库暂且叫做A,由于担心网络服务器崩溃导致之前所有的版本丢失,于是我需要将网络服务器上的版本库定期的备份到另外一台本地计算机上,被备份的版本库叫做B。由于没有管理员权限等,我们采取的备份策略为使用svn的sync命令进行版本库备份。为了方便我建立了一个批处理文件,以下是该文件的内容:

REM 注释示例1  本段代码用于同步版本库
:  注释示例2
dir /ad E:\Works\SVN_DDB | find "B"
if %errorlevel%==0 goto sync REM 如果文件夹存在
svnadmin create E:/Works/SVN_DDB/B
echo. > E:\Works\SVN_DDB\B\hooks\pre-revprop-change.bat
svnsync init file:///E:/Works/SVN_DDB/B/ http://××××××××××××××××××××
:sync
svnsync sync file:///E:/Works/SVN_DDB/B
pause


以上批处理文件中本地版本库名为"B",远端版本库地址为 http://××××××××××××××××××××
通过以上的批处理文件可以实现本地没有名为“B”的版本库的时候自动创建并且初始化一个版本库,如果有了该版本库则自动进行一次同步。在操作过程中由于网络连接或者其他原因我终止了该批处理文件的执行,然后重新执行该批处理文件就会报文色部分所示的错误信息。追究问题的根本原因是在于svnsync的执行过程,因为整个过程是读A写B,我猜想是在执行时,该svnsync程序将锁定本地被写的版本库B,操作完毕之后再解锁。但是由于意外终止了执行过程,于是只进行了锁定却没有进行解锁,导致下次锁定本地版本库B时失败。解决方法是执行以下命令:


  svn propdel svn:sync-lock --revprop -r ××××B
例如以下命令就表示了删除路径E盘works目录下的SVN_DDB目录下的B目录版本库属性,删除版本库属性从0版本开始删除。注意以下例子中的空格和目录路径之间的反斜线
svn propdel svn:sync-lock --revprop -r 0
file:///E:/Works/SVN_DDB/B


其中橙色的‘0’表示版本库的版本,而‘xxxxB’则为版本库B的路径。网上的解决方案一般是‘xxxxA’,最后使用的路径为源版本库的路径,经实际测试这是错误的,最后的地址应该使用写入端的地址而不是读取端的地址。

你可能感兴趣的:(版本控制)