【问题标题】:svnsync - couldn't get lock on destination repossvnsync - 无法锁定目标仓库
【发布时间】:2011-05-03 22:02:53
【问题描述】:

使用 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  

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

【问题讨论】:

    标签: svn svnsync


    【解决方案1】:

    实际上,svnsync(自 v1.7 起)内置了一些功能,可以“窃取”锁。

    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 的东西

    【讨论】:

    • v1.6没有这个选项
    • 此选项仅适用于 v1.7
    【解决方案2】:

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

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

    【讨论】:

    • 不,不是远程存储库——本地同步(镜像)存储库。
    • 请注意,这可能需要是 URL。我从目标机器运行它,所以 cmd 是: svn propdel --revprop -r0 svn:sync-lock localhost/svn/repo
    • 值得注意的是,IMO 同步锁始终应用于修订版 0。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      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 挂钩文件,其中的代码仅列出了可以进行所需更改的特定用户名。在上述命令中使用该用户名和密码删除了钩子。

      【讨论】:

        【解决方案5】:

        要确认锁的存在(虽然错误显然告诉它),使用-verbose运行proplist

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

        然后根据需要删除道具!

        【讨论】:

        • 这很有帮助,对我来说这个属性是 svn:rdump-lock (running svnrdump)。
        【解决方案6】:

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

        【讨论】:

        • revprops 是同步所必需的,因此如果我们在同步过程中遇到错误期间,则假定已经配置好了。
        猜你喜欢
        • 2011-11-12
        • 2015-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-16
        相关资源
        最近更新 更多