我正在尝试处理涉及我公司的 SVN 服务器的情况。我们将所有重要代码保存在锁定服务器中(我们将其称为“开发”服务器)。有些文件需要由公司网络外部的用户编辑,因此我们有另一个 SVN 服务器(“全局”服务器),它可以在防火墙外部访问,并且包含那些包含外部所需文件的目录的副本。如果重要的话,全局服务器的文件夹结构是开发服务器的子集(即它只是一些选择的文件/目录,但都具有相同的相对路径等)。我已经包含了一个简短的解释why如果您想阅读它,我们会尝试在帖子的末尾执行此操作,但请相信我,它必须在两个单独的服务器上完成。
乍一看,svnsync
似乎非常适合这项工作,但它有一个不幸的问题,即要求它是唯一修改目标存储库的东西。显然,这行不通,因为我们的开发存储库被大量使用。
在我看来,有两种解决方案,但都不是好的解决方案。我希望有人可以帮助我调整其中一个,或者更好地提供替代方案。
- 我的第一个想法是在开发服务器中使用外部,但这有一些问题。最值得注意的是,外部将遵循头部修订(我们不想将其设置为特定修订,因为这会破坏要点),因此,如果我们提取旧版本的开发存储库,外部定义仍将指向到全局存储库的负责人,而不是到我们旧版本时的全局存储库的样子 - 因此我们将无法仅通过检查旧版本来重新创建旧版本。
- 另一个解决方案是让 cron 作业定期从全局存储库导出最新版本,并将这些更改的文件覆盖到开发存储库的工作副本上,然后提交更改。可能这个覆盖并提交步骤将使用
svn_load_dirs.pl
SVN自带的脚本。理想情况下,这将作为全局存储库上的提交后挂钩来完成,但同样出于防火墙原因,全局服务器无法访问开发服务器,因此它必须由防火墙内的计算机(可能是开发服务器计算机本身)执行。这种方法的缺点是:开发服务器可能会在 cron 作业的时间间隔内过时,并且如果有人不小心向开发服务器提交了更改,他们的更改将被踩踏。 (顺便说一句,如果有人能想出一种双向同步的方法,那就太棒了!)
我目前倾向于选项 2,因为它似乎让我尽可能接近我所需要的,但它仍然是一个相当糟糕的选择。这本质上也是我们目前正在做的事情,由人类代替 cron 作业。我对这么长的帖子表示歉意。非常感谢您提供的任何帮助。
原因说明:我们需要这些共享文件存在于开发服务器目录层次结构中,因为它们是我们软件的必需部分,因此构建、测试等都必须拥有它们。我无法通过防火墙暴露开发服务器——我试图说服当权者,但失败了。我已经向决策者明确表示,为此使用两台独立的服务器并不是 SVN 的预期用途,并且可能会出现问题。为了帮助缓解我们预见到的一些问题,只有全局服务器是可写的。开发服务器的文件副本在概念上是只读的(仅当从全局服务器同步更改时才进行修改),但我认为我实际上无法使用 SVN 访问控制强制执行只读策略,因为其中的某些文件该目录结构不会存在于全局存储库中,因此需要在开发中可编辑,因此我不能盲目地将其设置为只读。在每个文件的基础上设置只读似乎无法维护,因为有数百个文件,并且经常添加和删除它们。
您可以尝试设置直写代理,以便公共存储库上的所有写入都会自动转发到私有服务器。
我从来没有这样做过,但是here http://svnbook.red-bean.com/en/1.5/svn.serverconfig.httpd.html#svn.serverconfig.httpd.extra.writethruproxy有关该主题的一些文档。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)