为每个开发人员提供SVN-VC和远程测试服务器的多开发人员安装.最佳做法?

Raf*_*ael 5 php svn collaboration branch branching-strategy

我想就如何满足以下要求的专业开发设置提供一些意见.

  • 几个PHP开发人员(比如PHP)
  • 每个开发人员属于一个组
  • 每个小组都有一名代表任务的团队领导
  • 每个开发人员都在一台Windows 7计算机上运行
  • 并使用NetBeans或Eclipse进行开发
  • 每个开发人员'拥有'一个虚拟测试服务器,在那里他可以运行代码
  • 正在使用的VCS是SVN
  • 有一个临时服务器,产品在发布/部署之前最终会经过测试

我给了一些特定的技术,不要太抽象和b/c我也会对插件等的具体建议感兴趣.


在该设置中,我想到了几个问题.

1)因此每个开发人员都将在个人分支机构工作.

2)该分支在工作副本中签出.

现在......这个工作副本在PC上使用dev的IDE进行本地编辑,并在服务器上执行/测试.

在这种情况下,最好/通常的做法是什么?我的意思是 - 如何在不造成太多开销的情况下在服务器上获取编辑后的代码?

开发人员会在他的本地磁盘上有代码吗?或者让IDE通过隧道或特定协议在远程虚拟服务器上写入会更好吗?

3)每天,开发人员都会将他的工作投入到他的个人分支中,该分支位于中央存储库中.

是否有关于存储库应该位于何处的最佳实践?一个单独的服务器?

4)然后在开发人员完成任务后,他/她或团队负责人将新代码合并到相应的主分支或主干中.


最令人困惑的部分是我在2)和3)之间写的内容.因为到目前为止我只使用本地服务器.例如,具有运行代码的服务器的VM位于共享文件夹中,因此我将能够直接编辑它.当服务器现在实际上是远程时,我不确定如何有效地弥合差距.有效地意味着不必通过FTP手动上传.

欢迎外部资源或书籍推荐.


编辑

我的问题是/准目标是准标准/最佳实践.我认为这几乎是一个标准的开发方案,因此必须有一个"通常"的解决方案.


编辑2

好的...所以让我们尝试一下图片: 设置

V是一个或多个开发人员的虚拟测试服务器D. C和C'是两个代码版本.它们应尽可能保持一致.

我想到了两个解决方案:

1:编辑C,然后将其上传到C',然后执行C',然后提交C.

2:没有C存在.Just C',它是通过一些隧道技术编辑并执行和提交的.

我的胆量告诉我两种解决方案都是半最优的.那么什么是"专业"/最有效/最快/最方便/最无摩擦/最不容易出错/最佳实践/行业标准?

任何问题?

小智 1

我确信每个人都有不同的做事方式,但这是我的想法。

“最佳实践”可能是“持续集成”,即每个开发人员没有自己的分支,而是签入公共开发分支。这迫使他们尽早处理冲突并相互协调,以避免首席开发人员在以后管理巨大的火车残骸合并。如果你真的想走那条路,请看看巡航控制。

最好的方法是他们有本地 apache Web 服务器和完整的 php 堆栈。您可以使用 Zend_Server 社区版在 Windows 上快速启动并运行。大多数标准 php 代码在 Windows 和 Linux 上都可以正常运行,但如果您正在进行大量文件操作或 cron 作业或 cli 内容,或者需要 memecache 等,您将遇到不兼容的情况。如果是这种情况,并且只有 Linux 的东西会困扰您,那么您可以使用 VMWARE 或 VirtualBox 来运行本地 Linux 实例,并在其中安装 IDE,并确保它们有足够的 RAM 来处理它。

每个开发人员都需要在 Eclipse 内部运行同步,基本上是 svn 更新,当场处理与其他开发人员的任何冲突,进行本地测试并提交他们的更改。

我在 svn 服务器上设置了一个post_commit 挂钩,该挂钩在我的 Web 服务器上调用 /autobuild.php 。autobuild.php 运行 svn update 并获取最新的代码更改以及任何 chown 或 chmod 文件权限内容并重置任何服务器特定的配置文件 config.php。设置它以便 apache 用户可以运行 svn update 有点棘手,但是一旦你完成了,你的 beta/测试服务器总是有最新提交的代码。CruseControl 和其他几个也可以帮助你做这类事情并添加单元测试等

现在,您的首席开发人员仍然有一项工作要做,将开发分支合并到生产分支中,在开发服务器上进行测试,审查其他人的提交,并决定如何以及何时推出版本,但您不会增加负担他解决每一个冲突并融合每一个变化。

您的开发人员不会将文件或 ssh 远程传输到服务器,他们只是在 IDE 中本地工作,并通过 svn(以及电子邮件、电话、聊天等)更新来获取新代码并在完成工作时提交,从而相互交互。

我不认为为每个使用 SVN 的开发人员建立一个单独的分支有什么好处。合并这些分支可能在 Git 中可行,但使用 SVN,您的首席开发人员很快就会讨厌这种类型的设置。