单个应用程序上有多个开发人员的开发环境

时间:2017-05-02 09:43:19

标签: git phpstorm development-environment

我正在寻找一种优化/改善我的同事和我处理应用程序的方式的好方法。

我们目前都在MacBook Pro(2016)上使用PhpStorm,我们网络中的Ubuntu服务器以及映射到SMB共享到我们机器的工作副本(我们有时编辑相同的文件,这使得这很不方便)。我们使用Git作为源代码控制,并且我们都有1个分支。

我们注意到通过网络共享使用PhpStorm的性能问题,我们的应用程序非常庞大,并且PhpStorm索引的所有内容都会使其冻结并始终感觉无响应。

我们正在寻找一种方法来改善我们的工作方式,简化应用程序的开发并消除我们对网络共享/工作副本组合的性能问题。

我们正在考虑在我们的机器上本地拥有一个工作副本,具有虚拟化的Web服务器(Vagrant)并且所有应用程序彼此分开运行。这将解决网络问题,但是如果我进行数据库更改,则会带来其他问题,这些更改也必须在我同事的工作副本上完成。

此外,我们一直在对相同的文件进行更改,我们最不希望的是每次进行更改时修复文件冲突,然而不得不拉动另一个开发人员在白天进行的每次提交,以及必须执行他们的数据库手动更改。

TL; DR,有3个开发人员处理1个应用程序的好方法。

6 个答案:

答案 0 :(得分:4)

一个好的改进肯定会在你自己的应用程序本地副本上工作。如您所述,这将解决性能问题,但会为您提供有关数据库更新的问题。

管理数据库更新的一种方法是为每个数据库架构更改使用迁移文件。假设您进行了更改,将此更改添加到您添加到git存储库的新迁移文件中。拥有这些文件后,每个人都可以在其本地开发数据库之上应用所有迁移,以使其数据库保持最新。它还使测试变得非常简单,因为您可以随时重置数据库并再次应用迁移。

您可以查看其他人如何应用此功能。有后端框架支持开箱即用(例如PHP的Laravel)。

答案 1 :(得分:2)

我能想到的一个解决方案可能是使用像git这样的版本控制系统。听起来像你想要同时处理同一个项目和可能同一个功能。

为了最大限度地减少合并冲突,我建议创建一个dev分支,对于每个功能,它应该从dev分支分支并被隔离,直到有更新(某人合并或您完成了该功能并合并)。然后,其他开发人员可以从开发中获取这些更改并继续其功能。

如果问题基于环境,您可以使用JetBrains ides中的docker功能创建一个可以使用的公共环境。

答案 2 :(得分:1)

https://www.atlassian.com/git/tutorials/comparing-workflows

注意它所说的部分:“开发人员首先克隆中央存储库。在他们自己的项目本地副本中,他们编辑文件并像使用SVN一样提交更改;但是,这些新提交存储在本地 - 它们与中央存储库完全隔离。这使得开发人员可以推迟上游同步,直到他们处于方便的断点。“

一旦你明白了这一点,我想其余的就是。

  1. 在签入
  2. 之前,始终从master更新本地分支并进行测试
  3. 经常入住!一天多次。请参阅第1点。每个签入都应包含相关代码和SQL脚本代码(以及任何其他资源),并且应该编译并工作!
  4. 合并冲突将会发生。没有魔杖或策略。一般来说,尝试协调,以便开发人员通常在隔离区域工作(这预示着你的代码很好地构建了。这通常是一个好主意,但这里的主题太大了)。我建议保留对文件的更改,其中包含一次只能向一个开发人员自动生成的任何代码。 (这是经验!)。
  5. 所有数据库更改都应该是一个脚本,因此代码文件的处理方式与版本控制方面的所有其他代码相同,开发人员应在提交之前在自己的数据库本地副本上进行测试。您可能需要有人在发布之前监督脚本,以查找冲突。您可以有一个规则,即每个数据库对象(table,view,sp)有一个脚本文件,使其更容易!

答案 3 :(得分:0)

在对原始回复添加评论后,我认为必须提供答案:

  • 正确使用git作为版本控制工具。通过让所有开发人员在单个资源上工作,您绝对不会利用版本控制的全部功能。让每个开发人员在他们自己的工作树上工作(本地或服务器上,如果你想保持这种方式),这样他们就可以利用git的功能进行本地开发(创建自己的分支机构,快速操作,而不是弄乱别的东西)人们正在做的事情,然后在事情准备就绪时将内容合并到上层开发分支中。这应该解决你的很多问题。

这是我名单上的首要任务。

答案 4 :(得分:0)

虽然我个人更喜欢使用Git及其分支,但PhpStorm的the deployment feature可能是您的解决方案。因此,您可以拥有一个将从外部资源更新的本地副本,而不是使用网络绑定共享。以下是关于如何自动更新的the configuration tutorialthe tutorial

答案 5 :(得分:0)

您应该将GIT存储库存储在集中位置,例如在Github或您的一个本地服务器中。任何开发人员都可以从/向中央存储库提取/推送更改,并使用本地副本(无SMB网络)。

考虑使用Docker容器。这将允许您拥有完全相同的开发环境。

可以使用数据库迁移完成数据库更改。请参阅此库doctrine/migrations