我有一种情况,我正在努力应对涉及我公司的SVN服务器。我们将所有重要代码保存在一个锁定的服务器中(我们将其称为“dev”服务器)。有些文件需要由公司网络外的用户进行编辑,因此我们有另一个SVN服务器(“全局”服务器),可以在防火墙外部访问,并包含那些包含外部所需文件的目录的副本。如果重要,全局服务器的文件夹结构是开发服务器的子集(即它只是几个选择文件/目录,但都具有相同的相对路径等)。我已经包含了一个简短的解释为什么我们试图在帖子的最后做这个,如果你想阅读它,但相信我,它必须在两个单独的服务器上完成。
乍一看,svnsync
似乎非常适合这项工作,但它有一个不幸的问题,即要求它是修改目标存储库的唯一方法。显然,由于我们的dev存储库被大量使用,这将无效。
在我看来,有两种解决方案,它们都不是一个好的解决方案。我希望有人可以帮助我调整其中一个,或者更好,但提供另一种选择。
svn_load_dirs.pl
脚本完成。理想情况下,这将作为全局存储库上的提交后挂钩完成,但出于防火墙原因,全局服务器无法访问开发服务器,因此必须由防火墙内的计算机执行(可能是开发服务器计算机本身) 。这种方法的缺点是:只要在cron作业上有间隔,dev服务器就会过时,如果有人意外地将更改提交到dev服务器,他们的更改就会被踩到。 (顺便说一句,如果有人能想出一种双向同步的方法,那就太棒了!)我目前倾向于选项2,因为它似乎让我尽可能接近我所需要的,但它仍然是一个非常糟糕的选择。它本质上也是我们目前正在做的事情,用人而不是cron工作。我为长篇大论道歉。非常感谢您提供的任何帮助。
解释原因:我们需要这些共享文件存在于dev服务器目录层次结构中,因为它们是我们软件的必需部分,因此构建,测试等必须具有它们。我不能通过防火墙暴露开发服务器 - 我试图说服那些失败的权力。我已经向决策者明确表示,为此设置两个独立的服务器并不意味着如何使用SVN并且可能存在问题。为了帮助缓解我们预见到的一些问题,只有全局服务器才可写。开发服务器的文件副本将在概念上只读(仅在从全局服务器同步更改时才进行修改),但我认为我不能实际执行具有SVN访问控制的只读策略,因为某些文件位于该目录结构不会存在于全局repo中,因此需要在dev中进行编辑,因此我不能盲目地将该事物只读。在每个文件的基础上设置只读似乎是不可维护的,因为有数百个并且经常添加和删除它们。
答案 0 :(得分:1)
您可以尝试设置直写代理,以便公共存储库上的所有写入都自动转发到私有服务器。
我从来没有这样做,但是here有关于这个主题的一些文档。
答案 1 :(得分:1)
在源控件上没有变得复杂,可能值得分割两个repos(从dev中删除全局代码),然后让dev的构建消耗全局构建。由于你的内部人员将能够同时承诺这两者,并且在两者中都有相同的代码是永远难以理解的。
你没有提到所涉及的语言工具......所以很难知道它是如何适合的。考虑构建全局发布工件,然后构建全局解析该依赖项。
你在备选方案2中没有提到的一件事是,你将失去审计跟踪,因为提交到全局的用户将不是覆盖并提交给dev的用户。