用git和php开发(web开发)

时间:2011-09-23 22:42:18

标签: php git workflow

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

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

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

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

基本上我想找到'write-test-revise-test-revision-test-commit'的最佳方法 如果您依赖于框架文件(可能是任何框架),则循环。你会创建一个'dev'服务器,还是会在本地工作站上重新创建确切的生产环境?理想情况下,只有在完成一些初始测试(明显的语法错误等)后才会提交代码。一个带有本地git repo的'dev'服务器需要你做一些小的改动来测试你的工作,这可能很乏味......

我希望我已经说清楚了。我正在寻找集成git和'write-test-commit'循环的最佳方法。通常,您将在本地计算机上进行测试,但通过Web开发,您可能需要一个Web服务器+框架才能测试您的代码。直接在“实时”服务器上编辑是我想要避免的。

感谢您的投入!

2 个答案:

答案 0 :(得分:4)

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

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

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

有关如何将更改合并到母版的确切规则取决于您的团队的偏好。但开发人员应该几乎总是拥有完整的本地开发环境。如果看起来很难设置一个,这是一个大问题。弄清楚如何使它变得简单,然后记录下来。

答案 1 :(得分:4)

肯定有很多方法可以做到这一点,但这是我最近工作的2美分。

首先,我可能会避免开发服务器本身,因为如果您有超过1个开发人员,每个开发人员可能会尝试使用冲突的代码更新开发服务器,或者如果他们正在处理类似的区域,则覆盖一些您的测试代码,因为您可能都在同一个分支中工作,但都修改了代码而尚未推送更改。

也就是说,您可能需要一个与您的实时服务器非常相似的开发服务器,以便在您和其他一些开发人员进行了大量更改之后,您可以在更新现场代码之前在开发服务器上测试它们。服务器

在我的环境中,我在Linux上开发并使Apache / PHP运行与实时服务器相同的版本和配置。这样,我克隆了我的git repo,设置了我的环境,以便我的文档根目录是我的git repo的“公共”目录(例如htdocs)。在这种情况下,我们有一个开发MySQL服务器,它通常是共享的,而不是在本地机器上,但你可以做任何最简单的事情。我们的系统依赖于来自现场的不断更新的数据,所以这就是共享数据库的原因,我们有一个系统可以自动将大量这些必要的“测试”数据添加到数据库中。

通过这种方式,我可以从git中获取最新的代码,完成我想要的所有工作,工作 - 修复 - 工作 - 工作 - 工作等等,当我完成任务后,我可以将更改推回到git为其他开发人员。

当您准备好发布时,您可以在开发服务器上执行所有测试和操作,确认它是好的,然后推送到实时。

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

我会避免你的方法1& 2,并使用类似3的东西。这可能是你做的最容易管理的事情。根据您的团队的不同,您可以创建一个预先构建的开发虚拟机,其中包含您正在使用的所有依赖项,正确的软件和开发工具,或者让开发人员自行设置。

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