应该调用SVNSYNC阻塞或不在后提交挂钩?

这是我的第一个问题在这里,实际上一个从StackOverflow移动,因为我认为这个网站将更加与主题同步。

我已经设置了我的存储库镜像,它很好地工作,但最近我有一个问题。

目标存储库留下一个未发布的锁不知何故 – 从我读这可能是由中止svnsync操作引起的,我怀疑这可能是因为在我的后提交钩我执行svnsync在阻塞模式,而不是它通过&进入后台。

我这样做是为了让用户可以确定,如果提交完成,那么它现在在所有的仓库,但也许它会引起他们击中取消和停止提交钩子的风险?

我找不到明确的指导方针或build议,哪一个更好或最好的做法是什么,甚至点击取消可以导致中止后提交挂钩和同步执行 – 在大多数地方,我看到人们使用&踢的同步在后台 – 这是否防止locking损坏的情况下,用户在同步进行时按下取消提交他的提交? 如何确保两个存储库真正同步或报告问题? 你需要一个单独的通知机制吗?

更新:

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

我在后台调用了svnsync,但是同时我还在等待它完成:

svnsync ... & wait $! 

我认为这很好地join了两全其美的领域,但是时间会performance出如何有效 – 请让我知道您对整个问题的看法,以及您可能需要分享的build议。

更新2:它没有解决这个问题 – 显然当挂钩被杀害它也杀死它的subprocess:(

有没有人有任何提示如何解决这个问题? 我真的希望我的用户能够知道并相信当他们看到提交完成时,这意味着所有的网站都是同步的。

更新3:时间stream逝,问题出现 – 大约2年我的方法工作得很好 – 我解雇了同步非阻塞,并没有等待 – 上周我们的镜像爆炸可能是由于2个不同的提交用户在同一秒(都成功的主:)) – 结果是svnsync无法正确复制修订版本属性,但也创造了一些奇怪的修订(它基本上复制一个提交,并创build一个单独的修订,并将其归因到svnsync用户)。 然后抱怨“有人”直接对镜像库进行更改。 没有办法去除提交在SVN我不得不从0到HEAD-2,这对于一个162GB的强大的仓库花了很长一段时间。 现在 – 几天后恢复操作 – 我修改了一下我的同步。

  1. 在提交钩我只是触摸一个触发器文件。
  2. 在cron作业中,每一分钟我都检查这个文件的存在 – 如果存在,我得到一个“同步锁”并执行提交。

这保证了系统是合理的响应,svnsync从来没有被调用过一次 – 一旦时间提供更多的数据,我会更新这个信息。

我会考虑把它从一个提交后的钩子移动到一个incrond任务,它将使用inotify监视存储库的变化,然后运行svnsync任务。

作为一个更加模块化的设置,它将为我提供更灵活的统一configuration – 也就是说,我不必更新各种用户的提交后挂钩。