SVN - 如何保持核心源代码的机密性,并让自由职业者只能访问模块

时间:2011-09-25 00:50:25

标签: svn copy-protection modular source-code-protection

我正在开发一个模块化的专有PHP应用程序。作为项目负责人和所有者,我希望保持核心引擎的机密性。自由职业者将在模块上工作(例如,1个模块的1个自由职业者,他们无法看到其他模块)。

我为核心(1个repo)和模块创建了repos(1个模块的1个repo)。回购的AFAIK应该放在htdocs之外。现在我考虑一下这个场景:使用SVN,我将为自由职业者A提供回购A,为自由职业者B提供回购B等。当结帐时,他只能在他的计算机上编辑模块A.为了测试他的模块,他会承诺。但是当它转到svn目录而不是htdocs时,他将无法立即测试它。然后他需要将提交的代码导出到htdocs。好吧,我想跳过这个导出步骤。

(1)有没有办法可以直接将代码提交给htdocs来测试它以使其更实用?

(2)有没有更好的方案来实现这一点(即自由职业者只允许读/写他所工作的模块,并且无法访问 - 甚至读取 - 到其他模块和核心系统)?

1 个答案:

答案 0 :(得分:1)

您正在谈论三个地方:

  • Subversion存储库本身。这是所有源代码都将存在的地方。可以通过Subversion客户端访问存储库,该客户端将与服务器通信。服务器可以使用 SVN 协议或 HTTP / HTTPS 。如果要使用 HTTP / HTTPS ,则需要设置Apache服务器。如果您想运行 SVN ,则需要运行svnserve进程。
  • 开发人员系统上的本地工作目录。这是签出文件的位置,以及开发人员可以进行更改的位置。它不一定与存储库在同一台机器上。
  • PHP Web服务器。这是PHP文件需要工作和可能被测试的地方。

让我们一次拿一个:使用 SVN HTTP / HTTPS ,可以限制谁可以查看,签出并将代码提交到库。在Subversion中,您可以将其指定为目录级别。因此,一位开发人员可以将代码签入http://myserver/svnrepos/module1,而另一位开发人员可以检查http://myserver/svnrepos/module2中的代码,并且都无法在http://myserver/svnrepos/core看到您的代码,

棘手的部分是将此信息提供给服务器进行测试。问题是如何允许开发人员进行提交而不必将代码放到服务器上。有几种方法可以做到这一点。

一种是创建服务器分支。如果开发人员想要PHP服务器上的代码,他们会将代码合并到服务器分支上。然后,您需要一种机制将代码从存储库移动到PHP服务器。

我不会为此目的使用post-commit钩子。您不希望开发人员等待钩子将其代码复制到服务器。此外,您可能想要上下调整服务器。

相反,使用crontab来查看Subversion存储库(尤其是服务器分支),然后在检测到更改时,关闭服务器,更新服务器中的文件,然后把服务器重新启动。我的方法是使用两个不同的目录。在服务器上有directory1。使用svn export将文件导出到directory2。因此服务器仍在运行。然后,关闭服务器,将directory2移至directory1,然后重新启动服务器。这使停机时间降至最低,服务器处于或多或少的稳定状态。

但是,您应该查看Jenkins来帮助您完成项目。 Jenkins将允许您和您的开发人员查看他们的更改(您可以限制谁看到了什么),进行基本测试。例如,您可以在提交后运行PHPMD(查看代码有多乱)和CPD(复制粘贴检测器),Jenkins将显示结果。然后,您可以在Jenkins上放置 deploy 按钮,开发人员可以将其构建部署到服务器。

Jenkins设置和使用都很简单。对于各种缺陷跟踪系统,Subversion和各种测试模块,有大量plugins。我不知道PHP有多少可用,但你可以看看。