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

时间:2011-04-08 13:47:26

标签: php svn branch collaboration branching-strategy

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

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

我提供了一些不太抽象的具体技术,而且我也会对插件等的具体建议感兴趣。


在这个设置中我想到了几个问题。

1)所以每个开发人员都会继续努力    个人分支。

2)该分支以工作副本签出。

现在......使用开发人员的IDE在PC上本地编辑此工作副本,并在服务器上执行/测试。

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

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

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

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

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


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

欢迎外部资源或图书推荐。


修改

我的问题是/准目标是准标准/最佳实践。我认为这几乎是一个标准的开发方案,所以必须有一个“通常的”解决方案。


编辑2

好的......所以让我们尝试一下图片: the setup

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

我想到了两个解决方案:

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

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

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

有问题吗?

4 个答案:

答案 0 :(得分:3)

也许它不是很有帮助,但GIT听起来非常适合你的问题,我建议你去看看GIT的功能。如果你有时间检查Linus Torvalds他会自我谈论GIT。 http://www.youtube.com/watch?v=4XpnKHJAok8

答案 1 :(得分:2)

您描述的标准程序或多或少相同。我也为你的团队提供了这种方法。它也可以称为分阶段应用程序开发。

以下是我的工作方式,我使用远程SVN主机(例如:assembla.com,unfuddle.com)来存储我的所有代码。我的团队成员将信息存储在这些远程svn服务器上。您也可以购买VPS并在那里设置SVN并使用相同的方法。

最佳做法是在本地进行测试并尽可能多地提交和提交,但每次提交都必须解决问题或包含添加任何新功能的重要段。

一旦所有人完成提交,首席开发人员就可以使用PuTTY等工具通过SSH登录到登台服务器。首席开发人员必须首先将代码签出到代码所在的文件夹中。在此阶段,如果多个开发人员编辑文件的同一段,则可能会出现文件冲突。然后,首席开发人员应首先解析代码,然后继续结帐。签出后,首席开发人员只需要在登台服务器上进行svn更新,以使代码更新。

基本思想是让代码在本地设置上运行,然后提交并更新用于在模拟场景中测试应用程序的分段,然后将其提交到实时站点。

有很多if和但是这里需要我写一章:)但简而言之,这就是热情。

工具(您可以在此设置下使用): - Tortoise SVN Manager - PuTTy - NetBeans

希望它有所帮助:)

答案 2 :(得分:2)

我不喜欢与个人分支机构合作。我在ClearCase工作了近15年,尽管ClearCase可能比大多数人更好地处理个人分支,但仍然是一个巨大的痛苦。更糟糕的是,个人分支机构鼓励人们直到最后一刻才开始工作 - 通常是在主要发布之前的一两天。

出于这个原因,并且为了迫使开发人员彼此保持正轨,我强烈建议所有人尽可能在一个分支(或主干上)上一起工作。我一直告诉开发人员在进行更改时会采取小咬

您需要的是一种自动部署的方法。也就是说,我在本地计算机上进行了更改,并使用单个命令确保服务器具有代码的副本。您还希望部署有效。如果更改2千兆字节,10,000文件部署的单个2千字节文件,则只需复制该文件,而不是10,000千兆字节。为此,我建议您在Ant中编写部署脚本。

您的开发人员可以修改文件,然后通过Ant脚本部署这些文件。开发人员不必记住他们更新了哪些文件,因为Ant会自动处理。事实上,Ant甚至可以修改文件,以确保它们在复制时包含正确的环境信息。当然,如果服务器上的设置与源存储库中的设置不同,Ant可以重新排列文件。 Netbeans和Eclipse都可以在IDE中执行Ant脚本。

所以:

  • 让开发人员修改本地计算机上的代码。
  • 运行Ant脚本以确保服务器和本地计算机同步。
  • 在服务器上测试。
  • 然后,一旦他们对服务器上的结果感到满意,请检查他们的更改。

有人提到像Jenkins这样的持续构建系统。无论如何,这实际上是一个好主意,即使它没有解决这个特定问题。詹金斯可以拥有自己的服务器和数据库。然后,当您提交代码时,Jenkins将更新服务器并运行自动化测试。然后Jenkins可以创建一个报告。这一切都显示在Jenkin的网页上。此外,您可以将您的部署存档在Jenkins上,因此,如果您告诉某人测试“Build#20”,他们可以简单地将其从Jenkins中删除,这很容易找到。

答案 3 :(得分:1)

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

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

最好的方法是,如果他们有一个本地apache web服务器和完整的php堆栈。您可以使用Zend_Server社区版快速启动并在Windows上运行。大多数标准的PHP代码都可以在Windows和Linux上运行得很好,但是如果你正在进行大量的文件操作或cron job或cli的东西,或者需要memecache等,那么你将遇到不兼容的问题。如果是这样的话,只有Linux的东西会咬你,你可以使用VMWARE或VirtualBox来运行本地linux实例并在其中安装IDE,并确保它们有大量的RAM来处理它。

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

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

现在,您的首席开发人员仍然需要将开发分支合并到Production One中,在开发服务器上进行测试,查看其他人的提交并决定如何以及何时推出发布,但是他解决每一场冲突并融合每一个变化的负担。

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

对于使用SVN的每个开发人员而言,我没有看到任何好的分支。合并这些分支可能在Git中有效,但是对于SVN,您的首席开发人员会很快就会厌恶使用这种类型的设置。