【问题标题】:Should a call to SVNSYNC be blocking or not in a post-commit hook?在提交后挂钩中是否应该阻止对 SVNSYNC 的调用?
【发布时间】:2010-09-07 18:29:18
【问题描述】:

我已经设置了我的存储库的镜像,它运行良好,但我最近遇到了一个问题。

目标存储库以某种方式留下了未释放的锁 - 从我读到的内容来看,这可能是由于 svnsync 操作的中止引起的,我怀疑这可能是因为在我的提交后挂钩中,我正在以阻塞模式执行 svnsync而不是通过 & 将其推入后台。

我这样做是为了让用户可以确定如果提交完成,那么它现在在所有存储库中,但可能会带来他们点击取消并停止提交挂钩的风险?

我找不到明确的指导方针或建议,说明哪个更好或最佳做法是什么,或者即使点击取消会导致 post commit hook 中止并从中执行同步 - 在大多数地方我看到人们使用& 在后台启动同步 - 如果用户在同步进行时按下取消提交,这是否可以防止锁定损坏?您如何确保两个存储库真正同步或报告问题?你需要一个单独的通知机制吗?

更新:

从以上两个选项中,我决定选择第三个;)

我在后台调用 svnsync 但同时我让钩子等待它完成:

svnsync ... &
wait $!

我认为这很好地结合了两全其美,但时间会证明它的有效性 - 请让我知道您对整个问题的看法以及您可能需要分享的建议。

【问题讨论】:

    标签: svn hook svnsync


    【解决方案1】:

    顾名思义,提交后挂钩在源存储库中的完整提交和新修订创建后运行。所以问题是:谁应该如何按下“中止”按钮?另一方面,为什么要进行阻塞操作?我会同步例如每 15 分钟等独立于提交......如果你真的是另一种方式,那么 Write-Through-Proxy 怎么样? 最重要的问题是为什么每次提交都需要这样的同步?

    【讨论】:

    • @khmarbaise:当您使用 tortoise 时,提交操作似乎一直在等待,直到 post-commit 钩子完成并在失败时显示输出 - 即使提交本身到主存储库已经在钩子执行时完成 - 当您按下取消时,我认为是同步可能中止的时间。至于为什么要进行阻塞操作-我需要确保两个存储库始终保持同步,因为许多客户都在生产中使用它们,并且 15 分钟的不同步会破坏我正在构建的系统(它必须是透明的镜像不是过时的镜像)。
    • 据我所知,您可以停止在服务器上启动的执行。另一方面,为什么你有两个复制的存储库而不使用一个? (可能会考虑使用 Wandisco 进行实时复制?)
    • 像往常一样 - 这很复杂 :) 我使用 SVN 作为后端,为许多机器提供数据 - 数据必须进行版本控制、分支等。在美国和欧洲有一些站点,存储库现在的大小约为 70GB,因此在另一侧有一个镜像确实有助于减少流量;) Wandisco 也可能工作得很好,但它并不是真正需要的,因为提交到单个存储库不是问题,只需在本地读取即可现在够了。
    猜你喜欢
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    相关资源
    最近更新 更多