我正在开发一个模块化的专有PHP应用程序。作为项目负责人和所有者,我希望保持核心引擎的机密性。自由职业者将在模块上工作(例如,1个模块的1个自由职业者,他们无法看到其他模块)。
我为核心(1个repo)和模块创建了repos(1个模块的1个repo)。回购的AFAIK应该放在htdocs之外。现在我考虑一下这个场景:使用SVN,我将为自由职业者A提供回购A,为自由职业者B提供回购B等。当结帐时,他只能在他的计算机上编辑模块A.为了测试他的模块,他会承诺。但是当它转到svn目录而不是htdocs时,他将无法立即测试它。然后他需要将提交的代码导出到htdocs。好吧,我想跳过这个导出步骤。
(1)有没有办法可以直接将代码提交给htdocs来测试它以使其更实用?
(2)有没有更好的方案来实现这一点(即自由职业者只允许读/写他所工作的模块,并且无法访问 - 甚至读取 - 到其他模块和核心系统)?
答案 0 :(得分:1)
您正在谈论三个地方:
svnserve
进程。让我们一次拿一个:使用 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有多少可用,但你可以看看。