使用git和PHP开发(web开发)


development with git and php (web development)

我正在努力寻找测试php开发代码的最佳方法,该方法依赖于某些框架文件。我认为git有三种可能的情况:

  • 创建一个实时生产目录的副本,并将这个'dev'目录克隆到本地工作站。下一步是在本地工作站上编辑代码并提交/推送每个更改。您可以通过生产服务器上的"dev"url检查您的工作。如果一切正常,您可以将更改推送到"live"目录。这种方法可能会导致大量的提交,因为你正在编辑/修复你的代码(语法错误或其他明显的错误),它增加了一个额外的步骤(提交/推送)来查看你的结果。

  • 创建一个'dev'服务器来镜像生产服务器。这个服务器将包含所有的框架文件,你可以直接编辑"live"目录的副本,并立即看到你的更改。如果您愿意,您可以将远程'dev'目录挂载到本地工作站。这需要一个额外的服务器,需要维护,你需要资源来设置它。

  • 创建一个本地'dev'工作站环境,并在'live'或'dev'服务器上克隆存储库。这样,您就可以在本地机器上测试所有代码,并且只推出经过测试和批准的提交。与方法一相反,这减少了提交的数量。要在本地重新创建'dev'环境,您可能必须在本地工作站安装许多框架/依赖文件,即使这样,当代码移植到实际的活动服务器时,它也可能不是100%可靠。

基本上,我想找到"写-测试-修订-测试-修订-测试-提交"的最佳方法。如果您依赖于框架文件(无论框架是什么),则循环。您是创建一个"开发"服务器,还是在本地工作站上重新创建完全相同的生产环境?理想情况下,您只会在完成一些初始测试(明显的语法错误等)后提交代码。一个带有本地git仓库的"dev"服务器会要求你提交每一个小的修改来测试你的工作,这可能很乏味....

我希望我已经说清楚了。我正在寻找集成git和"写-测试-提交"周期的最佳方法。通常你会在本地机器上进行测试,但在web开发中,你可能需要一个web服务器+框架来测试你的代码。直接在"实时"服务器上编辑是我想避免的。

感谢您的输入!

确实有很多方法可以做到这一点,但这里是我最近的工作心得。

首先,我可能会避免使用开发服务器本身,因为如果你有一个以上的开发人员,每个开发人员可能会尝试用冲突的代码更新开发服务器,或者如果他们在类似的领域工作,覆盖你的一些测试代码,因为你们可能都在同一个分支工作,但都修改了代码,但还没有推动更改。

也就是说,你可能想要一个与你的实时服务器非常相似的开发服务器,这样在你和你的其他一些开发人员做了一些改变之后,你可以在更新实时服务器上的代码之前在开发服务器上测试它们。

在我的环境中,我在Linux上开发,并使用Apache/PHP运行与活动服务器相同的版本和配置。这样,我克隆我的git仓库,设置我的环境,使我的文档根目录是我的git仓库的"公共"目录(例如htdocs)。在这种情况下,我们有一个开发MySQL服务器,它通常是共享的,而不是在本地机器上,但您可以在那里做任何最简单的事情。我们的系统依赖于不断更新的数据,所以这就是为什么共享数据库,我们有一个系统,它自动添加了很多必要的"测试"数据到数据库。

这样,我可以从git中提取最新的代码,我想做什么就做什么,work-break-fix-work-work-work等等,当我完成我的任务时,我可以将更改推回git供其他开发人员使用。

当你准备好发布时,你可以在开发服务器上做所有的测试和东西,验证它是好的,然后推送到上线。

在我更新"实时"服务器的情况下,一个人负责,我使用rsync将我的本地工作目录同步到实时服务器。所以当我完全确定我们已经准备好部署时,我从git中拉出最新的代码,并运行我的脚本,它将我的git目录rsync到服务器。

我会避开你的方法1 &2,然后是3。这可能是你做的最理智的事情,也是最容易管理的事情。根据你的团队情况,你可以创建一个预先构建的开发虚拟机,其中包含所有依赖项、正确的软件和开发工具,或者让开发人员自己设置。

到目前为止,这种方法对我和我团队中的其他人来说都很有效。

我很固执,但是每个开发人员都应该有一个本地开发AMP堆栈,他们可以开发。如果您不知道如何设置生产服务器的精确镜像,请先解决这个问题。

一旦你在那里,它应该是微不足道的让每个开发人员设置一个虚拟机与干净的操作系统安装,配置web/php/db服务器和库/框架,以匹配生产环境,检查你的项目,并开始工作。

开发人员在他们自己的本地仓库中提交个人分支,并在本地测试后发布他们的代码(通过推送或拉取请求或其他方式)。

关于如何将更改合并到master中的确切规则取决于您的团队和首选项。但是开发者应该总是拥有一个完整的本地开发环境。如果看起来很难建立一个,这是一个大问题。想办法让它变得简单,然后记录下来。