从FTP迁移到版本控制后要遵循什么策略?

时间:2013-07-19 07:16:04

标签: svn

Web开发业务中的公司一直使用FTP作为代码存储库。在几年的存在中没有应用版本控制。

将代码和库迁移到版本控制系统时(我计划使用SVN,这是我作为SVN用户所熟悉的)。

我的计划(现在已经安装了SVN)首先要创建一个目录。开发人员完全不知道版本控制,我可能会在这里使用类似问题的输入,例如Converting a development team from FTP to a Versioning System。然后让开发人员在开始将实际代码,模式和其他配置项置于版本控制之前大约播放(创建/提交/检出/更新/恢复)一周。

除了培训开发人员 - 我应该遵循什么策略,以及我应该面对哪些陷阱?想到的是需要一个脚本在分支时删除.svn条目。

P.S。主持人可以把它放在社区维基下吗?我相当肯定没有“一个完美的答案”;与此同时,这个话题可能会为他人带来价值。

1 个答案:

答案 0 :(得分:2)

在您说服那些从未使用过版本控制软件的开发人员之前,您必须准备好回答每个问题,担心并怀疑他们会有什么问题。你会被以下问题所困扰:

  • 我们之前的工作方式出了什么问题?我们从未遇到过任何麻烦! (当你进一步探究时,你会听到他们所遇到的各种问题,但很容易忘记,或者他们没有把这些问题视为问题)。
  • 我们如何将我们的东西部署到网站上?
  • 我的东西在哪里?
  • 为什么有这么多额外的步骤来做一些容易的事情?
  • 你为什么要阻挡这些障碍?我只需要完成我的工作!

您所关联问题的已接受答案是一个良好的开端。你需要证明:

  • 致开发者:这将有一天保存你的隐藏。
  • 致经理:您可以准确地跟踪谁在项目中做了什么。
  • 对于会计师:你最终会通过安全网(当事情变成梨形)并保持开发人员的开发而不是部署而节省时间(以及资金)。
  • 对系统管理员:这将使开发人员远离他们的服务器。

您无法安装版本控制(Subversion或其他)并将其称为一天。人们将会回归旧的方式,因为它更容易(它可能不是,它只是他们习惯的)。你需要掌握源和源;配置管理设计流程以支持您的工作流程以及跟踪要求。

您已经拥有至少两个完全独立且不同的环境(开发和生产),最好是三个(开发,分期和生产),对吧?如果没有,从那里开始。 人们不应随意对实时网站进行更改!如果可能,开发人员应该能够直接从他们的工作站运行他们的项目,以便他们可以在签入之前进行测试。

您的应用程序应完全自我配置。也就是说,每次将它们部署到给定环境中时,您都不需要手动操作它们。部署应该或多或少地“放手”#34;或至少编写脚本。完成设置后,您将需要自己的脚本,持续集成系统或两者的组合来处理部署。

您可以use a post-commit hook script在开发环境中更新您的网站。因此,只要开发人员提交更改,他们就会去开发站点进行查看。

我自己的设置是:

  • CruiseControl.NET在我部署到的每台服务器上运行。
  • 提交后,开发服务器上的CCNET服务接收更改,从SVN中提取项目,编译&部署到Tomcat应用服务器(它是一个Java Web应用程序)。
  • 成功部署后,CCNET在存储库中创建一个代表我刚部署的代码的标记。
  • 在我执行自己的测试后,登台服务器上的CCNET配置会更新为指向dev创建的标记,我们强制构建。
  • 成功构建分段后,将创建另一个标记。
  • 在签署最终验收测试后,我们更新生产服务器的CCNET配置并强制构建。
  • 成功构建生产后,会创建另一个标记。

我的CCNET配置也存储在Subversion中并通过CCNET部署,因此我们不必直接触摸服务器上的文件 - 我们更新,提交和触发"构建"它将更新的配置下拉到该服务器。

所有标签为我提供了什么?

  • 如果出现问题,我可以将每个环境恢复到之前已知的良好状态。
  • 我可以继续开发功能集B,同时等待功能集A在本周晚些时候的预定维护时段内升级到生产状态。

其他工具,例如RedGate的Deployment Manager,可以使这更加自动化。

为了使所有这一切发挥作用,你需要有一个坚实的,商定的过程,每个人都遵循。拥有强大的separation of duties也是有益的 - 您的开发人员不应该进行部署,而且您的管理员不应该在代码中捣乱。

好的,所以你已经完成了所有这一切,每个人(包括管理层!)都表示他们已经开始了,接下来会怎样?

取消对所有开发人员的非开发服务器的访问权限。不再有FTP,没有更多的shell, 没有 。如果你有一些日志,也许只读一些日志。

他们会发牢骚。他们会畏缩。他们会生你的气。 "你取消了我所有的访问权限!" "你正在困扰我!" "这将花费我10倍的时间进行简单的改变!" "你是一个怪物!" "你让撒旦看起来像个好人!"

无所谓。只要有更简单的方法,就会忽略正确的方法。这就是为什么你需要船上管理和观察你的背景。

由于实时流量的负载太大,第一次某些东西投入生产并导致数据库服务器关闭,您将恢复到之前版本的应用程序,并且事情将在5分钟后恢复正常。你将成为英雄。

你说你需要在剥离之前删除.svn条目"对我来说是一种担忧。你要么描述你的过程不好,要么你做错了。

编辑:记住别的东西。您的存储库有备份策略,对吧?如果没有,并且驱动器因数据丢失而失败,一切都将归咎于您和Subversion,而不是故障硬件(尽管硬件故障可能发生在任何地方)。